3

私のサイトは、次の JavaScript チェックで false を返し始めました。その理由を理解しようとしています。

_test = ["0e52a313167fecc07c9507fcf7257f79"]
"0e52a313167fecc07c9507fcf7257f79" in _test
>>> false
_test[0] === "0e52a313167fecc07c9507fcf7257f79"
>>> true 

誰かが理由を理解するのを手伝ってくれますか?

4

3 に答える 3

5

演算子はin、プロパティがオブジェクト内にあるかどうかをテストします。例えば

var test = {
    a: 1,
    b: 2 
};

"a" in test == true;
"c" in test == false;

配列に特定のオブジェクトが含まれているかどうかをテストします。Array#indexOf メソッドを使用する必要があります。

test.indexOf("0e52...") != -1 // -1 means "not found", anything else simply indicates the index of the object in the array.

MDN の Array#indexOf: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

于 2013-04-09T21:01:12.383 に答える
1

MDNから:

in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。

値ではなくキーをチェックします。

そこでは、プロパティ キーは0ではなくになり"0e52a313167fecc07c9507fcf7257f79"ます。

0 in _testであることをテストできますtrue

値が配列内にあるかどうかを確認する場合は、indexOfを使用します。

_test.indexOf("0e52a313167fecc07c9507fcf7257f79")!==-1

(IE8 では MDN が提供する shim が必要です)

于 2013-04-09T21:00:20.797 に答える
0

「in」演算子は、値ではなくオブジェクト キーを検索します。indexOf を使用し、以前の IE バージョンでは実装されていないことに注意する必要があります。そのため、最初の Google 検索結果で Array.prototype.indexOf メソッドのクロス ブラウザー実装を見つけることができます。

于 2013-04-09T21:03:09.380 に答える