2017-07-11 17 views
4

プリミティブ文字列値と厳密に比較した場合、文字列オブジェクトの作成がtrueを返さないのはなぜですか? strobj === strfalseであるため、stringであるobjタイプとしてJavaScriptが新しい文字列( '0')と厳密に等しくない理由は文字列= '0'です

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

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

ことですか '各変数に「型」を設定します。最初のものは 'オブジェクト'です。 2番目は 'string'です。 – Amy

+1

https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-usedに記載されているように、アイデンティティ===演算子と等価演算子==の違いを読むのに役立つかもしれません。 -in-javascript-comparisonと他のSEのかなりの数の記事があります。 – scrappedcola

答えて

9

objectあります。

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 

アイデンティティと演算子を等しいは全く異なるものです。 2番目のケースは非常に単純です。なぜなら、オブジェクトは文字列と同一ではないからです。 最初のケースはボクシング/アンボクシングのメカニズムを展開し、結果の値は式の演算子に依存します。この例では、strがプリミティブなので、objはアンボックスされ、比較は成功します。

new String('xxx') == new String('xxx')は、その型に強制的に変換するためのプリミティブな値がないため、もちろんfalseになります。 詳細はhttps://www.w3schools.com/js/js_type_conversion.aspを参照してください。

0

String ObjectString type valueはなぜ「===」であることと同じではありませんしているあなたは、文字列オブジェクトを作成する場合、それは文字列型の値と異なるfalse

を与えます。あなたは '===' 厳密な等価であることを使用する場合

var obj = new String('0'); // this is object type 
var str = '0';    // this is string type value 

厳格な平等は平等のための2つの値を比較します。どちらの値も、比較する前に暗黙的に他の値に変換されません。値の型が異なる場合、値は等しくないと見なされます。あなたはそれがfalse

チェック文字列オブジェクトと文字列型の値との差を表示するには、この答えを返します(厳密に比較「)===」を使用する場合、なぜだ Read More

Difference between the javascript String Type and String Object

関連する問題