【问题标题】:Is there a downside to returning 1 or 0 instead of true or false in JavaScript? [closed]在 JavaScript 中返回 1 或 0 而不是 true 或 false 有缺点吗? [关闭]
【发布时间】:2014-10-14 12:01:59
【问题描述】:

为了代码压缩,我想将truefalse 的实例分别更改为10。我不会做任何严格的布尔等于(比如boolA === true)。 这样做安全吗?

为了参考我的具体问题,我正在尝试实现一个通用的.equals() 方法,该方法出现在每个对象上并且可以被赋予任何其他对象:

Object.prototype.equals=function(o){function f(a,b){for(i in a){j=a[i]if(typeof j=="object"?!f(j,b[i]):j!=b[i])return!1}return!0}return f(this,o)&&f(o,this)}

GitHub

我的目标是让这个和许多其他基本实用程序的长度都小于 140 字节,这样我就可以更快地将我的网络应用程序提供给我的用户,并减少他们收取的数据费用。

【问题讨论】:

  • 只要您的调用代码知道实际返回值是数字而不是布尔值,它就是安全的。也就是说,只要您没有if (myFunc() === true) ...,它就是安全的
  • 首先想到的是,如果您这样做,您的代码可能不清楚。
  • Minifiers 无论如何都不会这样做。它们将缩短为 !1!0
  • 还有压缩代码,已经不清楚 XP - github.com/BlueHuskyStudios/Micro-JS-Equals/blob/master/lib/…
  • 我的意思是不清楚,如果我使用的是我没有编写的函数集合并获取数字,我不知道这些数字是否旨在表示布尔值或者我是否可以期待在某个时候看到像751 这样的东西。您可以通过以暗示布尔值的方式命名函数来缓解,例如isThing(),但还是很混乱。

标签: javascript boolean-expression


【解决方案1】:

因为1 !== true0 !== false,它具有相同的行为是不安全的。不过,它不会使浏览器崩溃。最终,这取决于您如何定义“安全”——这是主观的。

但是,您可以返回 !0 为真,!1 为假,分别与返回真或假具有相同的行为,但这将使您的代码显着可读性较差。

我的两分钱:不要做缩小器的工作。为了可读性和可维护性而编写,如果您想减小代码大小,请在部署过程中使用 proper minifier

【讨论】:

  • 我将“安全”定义为“程序和使用它的人仍应按预期运行”
  • @Supuhstar 那么答案是“否”,因为01 没有布尔类型,因此其行为方式与falsetrue 有多种不同。跨度>
  • 另外,我正在尝试为 140 字节的挑战这样做
  • @Supuhstar - 我将“安全”定义为易于阅读和维护,以尽量减少错误并提高清晰度。如果您可以将其自动化为传输速度的替代版本,那么它不应该成为您的编程工具包中的考虑因素。
  • @cdhowie 你能详细说明一下吗?他们会有多少不同的行为方式?
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多