Iのソース コードを読んでいると、次の行underscore.js
に出くわしました。
... if (obj.length === +obj.length) { ...
それは私にとって少し混乱しています。ここで実際に比較されているのは何ですか?ネイティブ配列の検出に関係があると思いますが、実際に何が起こっているのかわかりません。は何をし+
ますか?===
の代わりに==
使用する理由 このスタイルのパフォーマンス上の利点は何ですか?
Iのソース コードを読んでいると、次の行underscore.js
に出くわしました。
... if (obj.length === +obj.length) { ...
それは私にとって少し混乱しています。ここで実際に比較されているのは何ですか?ネイティブ配列の検出に関係があると思いますが、実際に何が起こっているのかわかりません。は何をし+
ますか?===
の代わりに==
使用する理由 このスタイルのパフォーマンス上の利点は何ですか?
+
値を数値に強制します (ブール値に強制するのと同じように!!
)。
if (x === +x)
x
...それ自体に整数値が含まれていることを確認するために使用できます。この場合、 の length プロパティがobj
整数であり、文字列値で上書きされていないことを確認する必要があります。これobj
は、 が配列として扱われると反復を台無しにする可能性があるためです。
obj.length
がNumberかどうかを確認するのはばかげた (IMO) 方法です。これの方が良い:
typeof obj.length == "number"