为什么评价为假?

Val*_*rie 1 javascript node.js

为什么将显式调用的String构造函数与隐式字符串求值进行比较true,但是添加new关键字使得它false在深度等于上进行求值,但是true在浅等于?

> "hello"===String("hello")
true
> "hello"==new String("hello")
true
> "hello"===new String("hello")
false
Run Code Online (Sandbox Code Playgroud)

编辑:在进一步测试之后,这似乎发生在具有隐式构造函数的所有类型中.

编辑2:澄清,这不是一个问题=====,但隐与显式的构造之一.

Pab*_*123 5

使用new关键字时,您正在创建对象.如果您要检查类型,new String('hello')您将看到它是类型object.检查'hello'自己的类型将产生string.

您可能知道,使用严格的equals运算符(===)将检查值和类型,因此由于类型不匹配,它将返回false.

没有new关键字的表达式返回true的原因是因为调用String全局对象与使用new以下方法调用构造函数不同:

字符串文字(用双引号或单引号表示)和从非构造函数上下文中的String调用返回的字符串(即,不使用new关键字)是原始字符串.

因此,返回值的类型将是,string而不是object,因此严格检查将返回true.