TypeError: cannot use 'in' operator to search for 'x' in 'y'

JavaScript 異常 "in 運算子的右側必須是物件" 發生在使用 in 運算子在字串、數字或其他原始型別中進行搜尋時。它只能用於檢查屬性是否在物件中。

訊息

TypeError: Cannot use 'in' operator to search for 'x' in 'y' (V8-based & Firefox)
TypeError: right-hand side of 'in' should be an object, got null (Firefox)
TypeError: "y" is not an Object. (evaluating '"x" in "y"') (Safari)

錯誤型別

TypeError

哪裡出錯了?

in 運算子只能用於檢查屬性是否在物件中。你不能在字串、數字或其他原始型別中搜索。

示例

在字串中搜索

與其它程式語言(例如 Python)不同,你不能使用 in 運算子在字串中搜索。

js
"Hello" in "Hello World";
// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'

相反,你需要使用 String.prototype.includes(),例如。

js
"Hello World".includes("Hello");
// true

運算元不能為 null 或 undefined

確保你正在檢查的物件不是 nullundefined

js
const foo = null;
"bar" in foo;
// TypeError: cannot use 'in' operator to search for 'bar' in 'foo' (Chrome)
// TypeError: right-hand side of 'in' should be an object, got null (Firefox)

in 運算子總是期望一個物件。

js
const foo = { baz: "bar" };
"bar" in foo; // false

"PI" in Math; // true
"pi" in Math; // false

在陣列中搜索

在使用 in 運算子在 Array 物件中搜索時要小心。in 運算子檢查的是索引號,而不是該索引處的值。

js
const trees = ["redwood", "bay", "cedar", "oak", "maple"];
3 in trees; // true
"oak" in trees; // false

另見