为什么新的Number(2)!= JavaScript中的新字符串(" 2")

时间:2014-08-28 15:53:22

标签: javascript object javascript-objects

以下评估为true

new Number(2) == 2
new String("2") == "2"

显然,以下情况也是如此:

"2" == 2
new Number(2) == "2"
new String("2") == 2

那么有人可以清楚地解释为什么他会评估false吗?

new Number(2) == new String("2")

3 个答案:

答案 0 :(得分:6)

因为JavaScript同时具有原语对象版本的数字和字符串(以及布尔值)。 new Numbernew String创建对象版本,当您使用==对象引用时,您将比较对象引用,而不是值。

new String(x)String(x)从根本上是不同的事情(对Number也是如此)。 使用 new运算符,您将创建一个对象。 没有 new运算符,您正在进行类型强制 - 例如String(2)为您提供"2"Number("2")为您提供2

答案 1 :(得分:1)

我认为==基本上是值的比较。

在上述所有情况下,它只是比较价值观。但在这一个

new Number(2) == new String("2")

两者都是对象,因此它不会比较值,它会尝试比较对象引用的值。这就是它返回false的原因。

答案 2 :(得分:1)

试试吧:

new Number(2) == new Number(2)

返回

  

您将得到答案:有2个不同的对象有2个不同的引用。