爲什麼創建的字符串對象在嚴格與原始字符串值進行比較時不會返回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