为什么这个评价是错误的?

为什么比较显式调用的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