首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Coersion Javascript中的Falsy值

带Coersion Javascript中的Falsy值
EN

Stack Overflow用户
提问于 2013-08-28 23:45:56
回答 3查看 253关注 0票数 0

有人能解释一下为什么..。(这是在铬控制台中)

空==假//假

!空==假//假

[]?“你好”:“再见”//“你好”

[] ==是真的吗?“你好”:“再见”//“再见”

我可以想出更多,但基本上javascript是如何得出这些结果的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-29 00:09:55

JavaScript做了很多类型铸造,这是不明显的,不知道它(JavaScript等式和性质是奇怪的)。

! NOT运算符、Boolean函数、? :三元运算符、if-clauses和逻辑和/OR运算符确实使用内部转换 --这就是我们对虚值0NaN""nullundefinedfalse的理解。

但是,当您比较事物时,(非严格)等式比较算法就会发挥作用,在比较对角线类型时会产生一些看似奇怪的结果。就你而言:

  • null只等于自身或undefined,而不等于false
  • 当您将数组对象与布尔值进行比较时,它会变得更加复杂。布尔人与其他类型的人进行比较,就好像他们是数字一样,也就是说,true首先被传递给1。然后,当将一个对象与一个数字进行比较时,它将被抛出到原语值 (没有首选类型)--调用实质上是调用方法 will 算法。因此,[]被抛给了"" --然后传递给ToNumber,因为它将与1进行比较。最后,0不是1。然而,[] == false[1] == true["1"] == true持有…
票数 2
EN

Stack Overflow用户

发布于 2013-08-28 23:52:15

魔法*神秘地挥动手*

更重要的是,对于前两个操作,!操作符在null上调用toBoolean,所以如果您检查了!null == !false!!null == false,就应该得到true。在其他情况下也可能发生类似的情况。

有了托尔·汉森提供的信息,我们也可以回答另外两个问题。[]是一个'truthy‘值,而不是一个布尔值,因此直接将它与true进行比较返回false。但是,您可以使用!操作符使其成为布尔值,因此!![] == true返回true

票数 0
EN

Stack Overflow用户

发布于 2013-08-29 00:09:16

这里有一篇关于这个主题的有趣文章:http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

在一些例子中,仅仅使用"==“是不够的。

!!空==假

[]

!![] ==真

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18500094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档