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
確保你正在檢查的物件不是 null 或 undefined。
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