メッセージ
TypeError: invalid 'in' operand "x" (Firefox) TypeError: Cannot use 'in' operator to search for 'x' in y (Chrome)
エラータイプ
何がうまくいかなかったのか?
in 演算子 はプロパティがオブジェクトに所属しているの確認にのみ使用できます。文字列や数値、そのほかのプリミティブ型を検索することはできません。
例
文字列を検索
そのほかのプログラミング言語 (たとえば、Python) と異なり、in 演算子を使用して文字列を検索できません。
"Hello" in "Hello World"; // TypeError: invalid 'in' operand "Hello World"
たとえば、代わりに String.prototype.indexOf() を使用します。
"Hello World".indexOf("Hello") !== -1;
// true
演算子は null か undefined ではいけない
検査するオブジェクトが実際は null か undefined ではないことを確認してください。
var foo = null; "bar" in foo; // TypeError: invalid 'in' operand "foo"
in 演算子は常にオブジェクトを想定しています。
var foo = { baz: "bar" };
"bar" in foo; // false
"PI" in Math; // true
"pi" in Math; // false
配列の検索
Array オブジェクトを検索するために in 演算子を使用する際は注意してください。in 演算子はインデックス番号を確認しますが、インデックスの値は確認しません。
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; 3 in trees; // true "oak" in trees; // false