2016-07-24 7 views
0

私は別の配列値のための一連のテストでした:空の配列はJavaScriptのものと厳密に等しいですか?

テスト:

x === 0 
x === '' 
x === false 
x === undefined 
x === NaN 
x === null 
x === [] 
x === {} 
x == 0 
x == '' 
x == false 
x == undefined 
x == NaN 
x == null 
x == [] 
x == {} 

結果:

xはいずれかの場合:

[NaN] 
[false] 

それが失敗しすべてのテスト。

xはいずれかである場合:

[null] 
[] 
[[]] 
[[[yep, no matter how deep]]] 
[undefined] 
[''] 

は渡し:

x==0 
x=='' 
x==false 

xはいずれかである場合:

[0] 
[{}] 

x==0 
x==false 
を通過

何か不足していますか?何か空の配列[]は厳密に(===)に等しいですか?

また、これらの値のために:[NaN],[false], [null], [], [[]], [undefined], [''], [0], [{}]、唯一[].lengthは0

に等しい配列が[]空であるかどうかを確認する方法についてのベストプラクティスは何ですか?競合するベストプラクティスがある場合、その状況を使用するのが最善ですか?

+3

'配列が空であるかどうかをチェックする方法に関するベストプラクティスは何ですか?' array.length == 0'はどうですか? –

答えて

6

空の配列は、それ自身と厳密に等しくなります。より適切には、特定の空の配列への参照を評価する式は、同じ配列への別の参照と厳密に等しいだけです。

配列だけでなく、空の配列でもなく、あらゆる種類のオブジェクトに適用されます。 ===との等価比較のための独自の特別な動作を提供する組み込みの方法はありません。

==との比較は、暗黙的に実行される型変換のための別の話です。しかし、オブジェクトの比較よりも==であっても(つまり、型変換が実行されない場合でも)同じルールに従います。オブジェクトへの参照は、同じオブジェクトへの別の参照と同じです。これらの2つの異なる空の配列であるため

[] === [] 

falseであることも

注。

{a: "hello"} === {a: "hello"} 

すべての配列やオブジェクト初期化子式は、彼らがルールの下で等しくないなら、同じを見てそうにもかかわらず、独自のオブジェクトを作成している同様に、

[1, 2] === [1, 2] 

は、falseですのJavaScript ===の比較。

+0

明確かつ簡潔な答えをありがとう。私は 'emptyArray.length == 0'を使って配列の空の有無を調べます。 – jpls93

関連する問題