2017-07-11 84 views
4

为什么创建的字符串对象在严格与原始字符串值进行比较时不会返回true?为什么string ='0'不严格等于javascript中的新String('0')

var obj = new String('0'); 
var str = '0'; 

console.log(obj == str); //returns true 
console.log(obj === str); //returns false 
+4

做一个'在每个变量上输入typeof。第一个是“对象”。第二个是“字符串”。 – Amy

+1

这也许有助于读取身份===运算符和相等运算符==之间的区别,如https://stackoverflow.com/questions/359494/which-equals-operator-vs-应该使用的那样在JavaScript的比较和不少其他SE的职位。 – scrappedcola

回答

9

作为obj类型是object其中strstring,因此obj === strfalse

var obj = new String('0'); 
 
var str = '0'; 
 

 
console.log(typeof obj); 
 
console.log(typeof str);

+0

感谢您的回答。 var str ='0'是否有原型? – onTheInternet

0
console.log(obj == str); //returns true 
console.log(obj === str); //returns false 

身份和等于运营商是完全不同的事情。第二种情况非常简单,因为对象不能与字符串相同。第一种情况演变出装箱/拆箱机制,并且结果值依赖于表达式中的运算符。在这个例子中,因为str是原始的,所以obj将被拆箱,并且比较将成功。

表达式new String('xxx') == new String('xxx')当然会是错误的,因为没有原始值强制转换为它的类型。 有关详细信息,请参阅https://www.w3schools.com/js/js_type_conversion.asp

0

String ObjectString type value的是不一样的,这就是为什么“===”给出false

如果你正在一个String对象,它是不是一个字符串类型的值不同。

var obj = new String('0'); // this is object type 
var str = '0';    // this is string type value 
当您使用 '===' 这是完全平等

完全平等的平等两个值进行比较。在比较之前,这两个值都不会隐式转换为其他值。如果这些值具有不同的类型,则认为这些值不相等。 Read More

这就是为什么当你使用“===”(严格的比较)返回false

检查这个答案,看字符串对象和字符串类型值之间的差额,Difference between the javascript String Type and String Object

相关问题