0

Underscore.js (バージョン 1.4.3) のコードを見ていると、次の行 (79 行) が表示されました。

   if (obj.length === +obj.length) {
        for (var i = 0, l = obj.length; i < l; i++) {
            if (iterator.call(context, obj[i], i, obj) === breaker) return;
        }
    }

ifステートメント+内で演算子を使用する理由がわかりませんでした。(+obj.length) そして、このステートメントは常にではありませんか? タイプミスではないと思います。使う目的があるはずです。誰かがこの使い方の利点を知っているなら、私は将来それを使いたい. ありがとう。


4

4 に答える 4

2

obj.lengthのような任意のタイプである可能性がありますundefined+obj.length常に数字です。

したがって、コードは基本的に、lengthプロパティが存在し、それが数値であるかどうかをチェックします。このチェックの理由は、_.each()配列オブジェクトと非配列オブジェクトの両方を受け入れるためです。配列の場合、lengthプロパティはその要素を反復処理する必要がありfor..inますが、非配列オブジェクトの場合はループが実行されます。

于 2013-03-07T12:10:01.817 に答える
1

単項+演算子は、そのオペランドと同等の数値になり、オペランドを数値NaNに変換できない場合に使用されます。

これは、Javascriptに存在するいくつかの小さな「トリック」の1つです。

  • !!foofoo-ブール値に変換します
  • ~~foofoo-32ビットの符号付き整数に変換します
于 2013-03-07T12:20:20.467 に答える
1

値を数値に変換します。この記事が役に立ちました:

http://www.2ality.com/2012/01/object-plus-object.html

乾杯!:)

于 2013-03-07T12:13:44.547 に答える
1

プラス演算子は、値を数値に変換します。

基本的に、a === +aa が文字列ではなく数値であることを確認します。

于 2013-03-07T12:08:59.433 に答える