5

条件文に出くわしましたが、理解が困難です。次のようになります (右側の - 記号に注意してください+)。

obj.length === +obj.length.

この条件とその目的/構文を説明できますか?
ステートメントを (知らず知らずのうちに) 見ると、ある種の汚いハックであるという印象を引き起こしますが、underscore.jsはかなり適切に設計されたライブラリであることはほぼ確実なので、より良い説明があるはずです。

バックグラウンド

  • このステートメントは、underscore.jsライブラリ ( underscore.js 注釈付きソース) の一部の関数で使用されていることがわかりました。
  • 私の推測では、この条件ステートメントは、変数objが配列型であることのテストに何らかの形で関連しているということですか? (しかし、私は完全に確信が持てません)。このコードを使用してこれをテストしようとしました。
var myArray = [1,2,3];
testResult1 = myArray.length === +myArray.length;
console.log( testResult1 ); // true を出力します

var myObject = { foo : "somestring", bar : 123 };
testResult2 = myObject.length === +myObject.length;
console.log( testResult2 ); // false を出力します

4

2 に答える 2

5

一度に 2 つのテストを実行します。

  • obj.length が数値であることを確認します
  • obj.length が NaN (数値ではない) でないことを確認します

次のように書くこともできます。

(typeof obj.length === 'number') && !isNaN(obj.length)

更新された回答: 最初に と同等だと言いましたがtypeof obj.length === 'number') && isFinite(obj.length)、 と に対して true を返すため、そうではありませ+Infinity-Infinity。それを指摘してくれたRobGに感謝します

于 2013-11-06T09:49:24.333 に答える