为什么这个评价是错误的?
为什么比较显式调用的String
构造函数与隐式string计算结果为true
,但添加new
关键字使深度等于false
时为false
,而在浅等于则为true
?
> "hello"===String("hello") true > "hello"==new String("hello") true > "hello"===new String("hello") false
编辑:进一步testing后,这似乎发生与所有types具有隐含的构造函数。
编辑2:澄清,这不是==
与===
的问题,而是隐式与显式构造函数之一。
当你使用new
关键字,你正在创build一个对象。 如果您要检查new String('hello')
您将看到它是typesobject
。 检查'hello'
的types将会产生string
。
正如你可能知道的那样,使用一个严格的等号运算符( ===
)将检查值和types,所以它将返回false,因为types不匹配。
不带new
关键字的expression式返回true的原因是因为调用String
全局对象与使用new
调用构造函数不同 :
在非构造函数上下文中(即,不使用new关键字)从String调用返回的string文字(用双引号或单引号表示)和string是原始string。
因此,返回值的types是string
而不是object
,所以严格的检查将返回true。
==
和===
之间的区别在于===
要求types相同,而==
不要。
所以这是告诉你, "hello"
String("hello")
是相同的types(这是string
); 但new String("hello")
,虽然它具有相同的值,是不同的types(这是object
)