为什么评估为假?

时间:2017-01-30 17:14:16

标签: javascript node.js

为什么将显式调用的String构造函数与隐式字符串进行比较评估true,但添加new关键字会使其在深度等于false上进行评估,但是{{ 1}}再次浅层等于?

true

编辑:在进一步测试后,所有具有隐式构造函数的类型都会出现这种情况。

编辑2:澄清一下,这不是> "hello"===String("hello") true > "hello"==new String("hello") true > "hello"===new String("hello") false ==的问题,而是隐式与显式构造函数之一。

2 个答案:

答案 0 :(得分:5)

使用new关键字时,您正在创建对象。如果您要检查new String('hello')的类型,则会看到它的类型为object。单独检查'hello'的类型将产生string

如您所知,使用严格的等于运算符(===)将检查值和类型,因此由于类型不匹配而返回false。

没有new关键字的表达式返回true的原因是因为调用String全局对象是not the same as calling the constructor using new

  

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

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

答案 1 :(得分:1)

=====之间的区别在于===要求类型相同,而==则不需要。

因此,这告诉您"hello"String("hello")属于同一类型(string);但new String("hello")虽然具有相同的值,但却是一种不同的类型(object