3

inArrayメソッドに関するjQueryのドキュメントを読んでいたのですが、1つの文の意味を本当に理解できません。このメソッドは、要素が配列にない場合は-1を返し、そうでない場合は0を返すと言った後、次のようになります。

JavaScriptは0をfalseと大まかに等しいものとして扱うため(つまり、0 == falseですが、0!== false)、配列内の値の存在をチェックする場合、それが等しくない(またはより大きい)かどうかをチェックする必要があります)-1。

JavaScriptが0を大まかにfalseに等しいものとして扱うという事実が、メソッドの戻り値をチェックする必要性と何の関係があるのか​​理解できません。JavaScriptがこのように機能しなかったとしても、これを行う必要はありませんか?

4

6 に答える 6

8

これは基本的に、次のようにテストを作成する必要があることを意味します。

if ($.inArray(value, array) > -1) {
    // the element is inside the array
}

それ以外の:

if ($.inArray(value, array)) {
    // the element is inside the array
}

2番目の構造を使用しない理由は、値が配列の最初の要素である場合、inArray関数は0を返すため(これは配列の最初の要素のインデックスであるため)、ドキュメントで説明されているように、次の0ことを意味しfalseます。

if (0) {
    // this will never run
}
于 2012-05-07T08:50:14.130 に答える
6

彼らは、その関数1の恐ろしい誤った名前付けについて裏側を覆っているだけです。

言い換えれば、彼らはあなたがしてはいけないと言っています:

if ($.inArray(a, b) == false) {
   // will fail if the element is in index 0
}

1という名前の関数inArrayは、論理的に(しゃれは意図されていません)、位置ではなくブール値を返すことが期待されます。

于 2012-05-07T08:51:04.053 に答える
3

inArrayこれは、実際に名前が付けられている必要があることを意味しindexInArrayます。

これにより0、最初の要素で検出されたという意味であり、検出されなかったという意味ではありません。

于 2012-05-07T09:01:27.553 に答える
1

値が配列のインデックスにある場合は問題になります0false== false )null
0

-1値がまたはより大きいかどうかを確認します!=-1

問題の例:

if ($.inArray(20, [20]))
    // won't run the value is in index - 0

if ($.inArray(20, [20]) > -1)
    // Will run!

デモ

于 2012-05-07T08:50:05.487 に答える
1

インデックスはで始まる0ので、次0のような場合の有効な値です。

​var arr = ['foo']​​;
​console.log($.inArray('foo', arr));​​​​​

そのため、jQuery開発者は、開発者が次のような値の存在を確認した場合に明らかなエラーを防ぐため-1に、代わりにを使用することにしました。false

if (!$.inArray(..))
于 2012-05-07T08:50:45.750 に答える
1

javascriptでは、0はfalseで1はTrueです。または、trueまたはfalseを使用できます。ゼロは配列の位置であり、配列の最初の項目です。

ifステートメントで比較するとif(0)はfalseと見なされます。

しかし、配列のコンテキストでのあなたの答えは、アイテムがゼロの位置にあるということです。

于 2012-05-07T08:53:20.890 に答える