in operator
Оператор in
возвращает true
, если свойство содержится в указанном объекте или в его цепочке прототипов.
Синтаксис
prop in object
Параметры
prop
- Строка или symbol, представляющий название свойства или индекс массива (non-symbols будут конвертированы в строки).
object
- Объект, в котором нужно проверить содежание свойства с заданным именем.
Описание
В примере ниже показаны некоторые способы использования оператора in
.
// Массивы
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees // true
3 in trees // true
6 in trees // false
"bay" in trees // false (вы должны указать индекс элемента в массиве, а не значение в этом индексе)
"length" in trees // true (length является свойством Array)
// Уже существующие объекты
"PI" in Math // true
// Пользовательские объекты
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar // true
"model" in mycar // true
Вы должны указать объект справа от оператора in
. Например, вы можете указать строку, созданную через конструктор объекта String
, но вы не можете указать строковый литерал.
var color1 = new String("green");
"length" in color1 // returns true
var color2 = "coral";
// сгенерирует ошибку (color2 is not a String object)
"length" in color2
Использование оператора in
с неопределенными или с уже удаленными свойствами
Если вы удалили свойство при помощи оператора delete
, то оператор in
возвратит false
для этого свойства.
var mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar; // false
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // false
Если вы зададите свойству значение undefined
, но не удалите его, то для этого свойства оператор in
вернет значение true
.
var mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar; // true
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
trees[3] = undefined;
3 in trees; // returns true
Наследуемые свойства
Оператор in
возвратит true
для свойств, которые унаследованы по цепочке прототипов. (Если вы хотите проверить только не наследованные свойства, используйте Object.prototype.hasOwnProperty()
.)
"toString" in {}; // true
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript (ECMA-262) Определение 'Relational Operators' в этой спецификации. |
Живой стандарт | |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Relational Operators' в этой спецификации. |
Стандарт | |
ECMAScript 5.1 (ECMA-262) Определение 'The in Operator' в этой спецификации. |
Стандарт | |
ECMAScript 3rd Edition (ECMA-262) Определение 'The in Operator' в этой спецификации. |
Стандарт | Определено изначально. Реализовано в JavaScript 1.4 |
Совместимость с браузерами
BCD tables only load in the browser