为什么创建的字符串对象在严格与原始字符串值进行比较时不会返回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
为什么创建的字符串对象在严格与原始字符串值进行比较时不会返回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
作为obj
类型是object
其中str
是string
,因此obj === str
是false
。
var obj = new String('0');
var str = '0';
console.log(typeof obj);
console.log(typeof str);
感谢您的回答。 var str ='0'是否有原型? – onTheInternet
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。
String Object
和String 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
做一个'在每个变量上输入typeof。第一个是“对象”。第二个是“字符串”。 – Amy
这也许有助于读取身份===运算符和相等运算符==之间的区别,如https://stackoverflow.com/questions/359494/which-equals-operator-vs-应该使用的那样在JavaScript的比较和不少其他SE的职位。 – scrappedcola