有人能解释一下为什么..。(这是在铬控制台中)
空==假//假
!空==假//假
[]?“你好”:“再见”//“你好”
[] ==是真的吗?“你好”:“再见”//“再见”
我可以想出更多,但基本上javascript是如何得出这些结果的?
发布于 2013-08-29 00:09:55
JavaScript做了很多类型铸造,这是不明显的,不知道它(JavaScript等式和性质是奇怪的)。
! NOT运算符、Boolean函数、? :三元运算符、if-clauses和逻辑和/OR运算符确实使用内部转换 --这就是我们对虚值0、NaN、""、null、undefined和false的理解。
但是,当您比较事物时,(非严格)等式比较算法就会发挥作用,在比较对角线类型时会产生一些看似奇怪的结果。就你而言:
null只等于自身或undefined,而不等于false。true首先被传递给1。然后,当将一个对象与一个数字进行比较时,它将被抛出到原语值 (没有首选类型)--调用实质上是调用方法 will 它的算法。因此,[]被抛给了"" --然后传递给ToNumber,因为它将与1进行比较。最后,0不是1。然而,[] == false和[1] == true或["1"] == true持有…发布于 2013-08-28 23:52:15
魔法*神秘地挥动手*
更重要的是,对于前两个操作,!操作符在null上调用toBoolean,所以如果您检查了!null == !false或!!null == false,就应该得到true。在其他情况下也可能发生类似的情况。
有了托尔·汉森提供的信息,我们也可以回答另外两个问题。[]是一个'truthy‘值,而不是一个布尔值,因此直接将它与true进行比较返回false。但是,您可以使用!操作符使其成为布尔值,因此!![] == true返回true!
发布于 2013-08-29 00:09:16
这里有一篇关于这个主题的有趣文章:http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
在一些例子中,仅仅使用"==“是不够的。
!!空==假
[]
!![] ==真
https://stackoverflow.com/questions/18500094
复制相似问题