以下评估为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")
答案 0 :(得分:6)
因为JavaScript同时具有原语和对象版本的数字和字符串(以及布尔值)。 new Number
和new 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个不同的引用。