代码之家  ›  专栏  ›  技术社区  ›  Leff

Javascript与添加空数组和对象的类型和结果的混淆[重复]

  •  1
  • Leff  · 技术社区  · 6 年前

    我遇到过这样的比较:

    [] + []   === ''; // true
    [] * 1    === 0;  // true
    false + 1 === 1;  // true
    

    [] + [] 等于空字符串及其原因 [] * 1 等于 0 ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   OliverRadini    6 年前

    The answer 从hardik shah发布的评论链接起来,肯定会让您更好地理解这些类型的评估是如何在javascript中处理的。这个答案指向了ecma文档,它也很有用。我会尽量给你一个有限的解释,你张贴的例子是如何工作的。

    下面我引用了一篇文章作为解释 + 操作员工作。我相信我对这篇文章的解释是正确的,但我不是这方面的专家,所以我很乐意被更正。


    [] + []   === ''; // true
    

    这是真的,因为两个操作数都是对象; [].valueOf 不返回原语,所以 [].toString 使用,其计算结果为 ''


    [] * 1    === 0;  // true
    

    这是真的,因为其中一个操作数是基元,所以使用算术而不是连接。 '' * 1 0 * 1 ,等于 0


    false + 1 === 1;  // true
    

    这里的两个操作数都是原语,因此将使用算术。 Number(false) 给我们0,所以 0 + 1 等于 1


    this article

    1. 如果至少有一个操作数是对象,则将其转换为原始值(字符串、数字或布尔值)
    2. 转换后,如果至少有一个操作数是字符串类型,则将第二个操作数转换为字符串并执行连接
    3. 在另一种情况下,两个操作数都转换为数字,并执行算术加法。

    • 如果对象类型是Date,则使用toString()方法;
    • 在其他情况下

    • 在其他情况下(如果valueOf()不存在或不返回原语值),