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:澄清,这不是一个问题==对===,但隐与显式的构造之一.
使用new关键字时,您正在创建对象.如果您要检查类型,new String('hello')您将看到它是类型object.检查'hello'自己的类型将产生string.
您可能知道,使用严格的equals运算符(===)将检查值和类型,因此由于类型不匹配,它将返回false.
没有new关键字的表达式返回true的原因是因为调用String全局对象与使用new以下方法调用构造函数不同:
字符串文字(用双引号或单引号表示)和从非构造函数上下文中的String调用返回的字符串(即,不使用new关键字)是原始字符串.
因此,返回值的类型将是,string而不是object,因此严格检查将返回true.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |