【问题标题】:Is Chrome Javascript evaluating boolean expressions correctly?Chrome Javascript 是否正确评估布尔表达式?
【发布时间】:2016-09-30 14:41:11
【问题描述】:

分配默认值是一种流行的模式:

var aBool = '' || false;
var aString = false || '';

以上将给aBool boolean 值false 和aString 一个空字符串的值,至少在Chrome 和FF 的控制台中。与此相反:

如果可以转换为true则返回expr1;否则,返回 expr2.因此,当与布尔值一起使用时,||如果有任何一个,则返回 true 操作数可以转换为真;如果两者都可以转换为假, 返回假。 来源:mozilla

这其实很方便,但是对吗?

【问题讨论】:

  • 不,它不是而且实际上没有意义。随意编辑该页面(“因此...”部分应删除)。
  • "如果能转换成true则返回expr1;否则返回expr2"是句子的重要部分
  • 怎么了,对我来说似乎是正确的? 如果与布尔值一起使用,如果其中一个操作数为真,则返回真,如果两者都为假,则返回假?
  • “如果任一操作数都可以转换为true,则返回true”,但它不是true,它是false,所以应该返回'',如果你这样做了|| '',你会得到真实的。
  • 再说一次,它出了什么问题?如果两个值都是布尔值,并且两个值都是false,则返回false。空字符串不是布尔值?

标签: javascript google-chrome firefox boolean evaluation


【解决方案1】:

在同一个网页上,它说:

可以转换为 false 的表达式示例有:

  • 空;
  • NaN;
  • 0;
  • 空字符串(“”);
  • 未定义。

在您的第一个示例中,您有一个空字符串,因此在转换为布尔值时它会转换为 false。由于expr1无法转换为true,因此表达式返回expr2,即false

在第二个示例中,expr1false,因此它返回 expr2,即 ''。到Boolean 的转换仅用于确定应该返回哪个表达式,它不返回转换后的值。

【讨论】:

  • 谢谢,我知道它的作用,只是与文档混淆了。现在已经修好了,我放心了;)
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多