【问题标题】:Empty array returning false when compare but when it is alone returning true...why like this比较时空数组返回假,但当它单独返回真时......为什么这样
【发布时间】:2016-07-08 22:58:18
【问题描述】:
if([]==true) //evalutes as false

//当我用真检查空数组时,如果评估 [] 为假,那么它 如果条件返回false

if([]) //evalutes as true

//当我单独检查空数组时,如果评估 [] 为真,那么如果 条件返回真

为什么会这样评价?

谢谢

【问题讨论】:

    标签: javascript arrays if-statement conditional


    【解决方案1】:

    基于abstract equality comparison algorithm,您的第一个代码将按如下方式进行评估,

    第 1 步:ToNumber([]) == true

    第二步:ToPrimitive([]) == true

    (当传递的参数是 object 时,ToNumber() 将调用 ToPrimitve()

    第 3 步:"" == true

    第 4 步:0 == true

    第 5 步:false == true

    第 6 步:false

    在第二种情况下,[] 是一个真值,因此if([]) 将始终被评估为真,这里[] 不会被转换为原语。当您使用== 运算符时,抽象的相等比较算法就会发挥作用。

    另一个更好的例子是,

    var x = [] || "hello";
    console.log(x); // [] 
    

    由于[] 是一个真实值,x 将设置为[] 而不是"hello"

    【讨论】:

    • ToPrimitive 如果 y 的类型是字符串或数字,将被调用。这基本上是最后一点 10. 因为它不满足前 9 个条件。不过,您给出了规范的正确部分。 +1
    • 我不明白一件事...为什么当我们与布尔值比较时它会调用 ToNumber 方法?
    【解决方案2】:

    当您仅使用变量作为条件时(不使用比较运算符),Javascript 将使用 Boolean() 函数将其转换为 Boolean

    http://www.w3schools.com/js/js_booleans.asp

    在你的情况下,Boolean([]) = true 所以它返回为真。

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2013-02-20
      相关资源
      最近更新 更多