【问题标题】:Why is {}+{} in the same browser works have different results为什么{}+{}在同一个浏览器工作会有不同的结果
【发布时间】:2016-08-08 07:29:12
【问题描述】:

我在谷歌浏览器控制台运行是这样的

{}+{} => "[对象对象][对象对象]"

但是我在源文件中运行是这样的

{}+{} => NaN

我在firefox浏览器控制台运行是这样的
{}+{} => NaN

【问题讨论】:

    标签: javascript web browser ecmascript-5


    【解决方案1】:

    我正在准备另一个答案,基本上说:“我不知道,但这里有一些我做过的测试并得到了类似的结果”。但突然间我意识到了真正的答案。

    我认为这在 javascript 语法中是一种未定义的行为。 Chrome 控制台开发人员可能已经意识到这一点,每当您在控制台中写入 {}+{} 时,它会将代码转换为 ({}+{})。尝试({}+{})a={}+{},您将在任何地方得到相同的结果,即"[object Object][object Object]"。这是在 javascript 中对两个对象应用加号运算符的结果。

    但是,当您在 sn-p 中编写一些代码时,它会按原样进行评估。它会将{}+{} 计算为NaN。但是NaN并不是两个对象相加的结果。 {} 是对象构造函数字面量。但它也用于范围。所以评估的内容等于:

    { // Open scope
      // You can write any working code here
      // Only the result of the last statement is printed to console
    } // Close scope
    +{} // Result of this is NaN
    // + is the unary number cast operator not the binary addition operator
    

    您可以通过使用一元运算符来确认这一点。以此为例:

    {}~{}
    // Error in Chrome console as it is turned into ({}~{}) which is bad syntax
    // -1 in eval as it is the result of ~{}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 2014-07-30
      相关资源
      最近更新 更多