4

Iのソース コードを読んでいると、次の行underscore.jsに出くわしました。

... if (obj.length === +obj.length) { ...

それは私にとって少し混乱しています。ここで実際に比較されているのは何ですか?ネイティブ配列の検出に関係があると思いますが、実際に何が起こっているのかわかりません。は何をし+ますか?===の代わりに==使用する理由 このスタイルのパフォーマンス上の利点は何ですか?

4

3 に答える 3

6

+値を数値に強制します (ブール値に強制するのと同じように!!)。

if (x === +x)

x...それ自体に整数値が含まれていることを確認するために使用できます。この場合、 の length プロパティがobj整数であり、文字列値で上書きされていないことを確認する必要があります。これobjは、 が配列として扱われると反復を台無しにする可能性があるためです。

于 2013-02-14T16:31:21.163 に答える
1

obj.lengthNumberかどうかを確認するのはばかげた (IMO) 方法です。これの方が良い:

typeof obj.length == "number"
于 2013-02-14T16:30:07.530 に答える