Объект, ассоциативный массив
Object
()Объект, является прототипом для всех объектов языка
var obj = {};
var obj2 = new Object();
var person = {
'name': 'Alex',
'age': 25
};
person.name;
// 'Alex'
person['name'];
// 'Alex'
delete person.age;
// создание дочерних объектов
var Megaperson = Object.create(person);
let object = {
name: 'ilnurgi',
age: 23,
["first"+"Name"]: 'gii'
}
let {name, age} = object;
let {name: x, age: y} = object;
let {["na" + "me": x, age: y} = object;
let x = 1, y = 2;
let object = { x, y };
let object = {
myFunction() {...};
};
object.myFunction();
let a = {a: 12, __proto__: {b: 13}}
let obj1 = {
f1: 'v1',
f2: 'v2',
}
let obj2 = {
...obj1,
f1: 'v11',
fN: 'vN'
}
let copyObj = { ...oldObj };
let mergedObj = { ...obj1, ...obj2}
Object.
constructor
Ссылка на конструктор
a = new Array(1,2,3);
a.constructor == Array;
// true
Object.
getOwnPropertySymbols
()Возвращает массив символьных свойств объекта
New in version EcmaScript6.
Object.
hasOwnProperty
(name)Возвращает булево, обладает ли объект свойством.
// Создать объект
var o = new Object();
// Определить неунаследованное свойство
o.x = 3.14;
o.hasOwnProperty("x");
// Вернет true: x – это локальное свойство
o.hasOwnProperty("y");
// Вернет false: объект не имеет свойства y
o.hasOwnProperty("toString");
// Вернет false: свойство toString унаследовано
Object.
isPrototypeOf
(obj)Является ли данный объект прототипом для указанного объекта
var o = new Object();
// Создать объект
Object.prototype.isPrototypeOf(o)
// true: o – объект
Function.prototype.isPrototypeOf(o.toString);
// true: toString – функция
Array.prototype.isPrototypeOf([1,2,3]);
// true: [1,2,3] – массив
// Ту же проверку можно выполнить другим способом
(o.constructor == Object);
// true: o создан с помощью конструктора Object()
(o.toString.constructor == Function);
// true: o.toString – функция
// Объекты-прототипы сами имеют прототипы. Следующий вызов вернет true, показывая, что
// объекты-функции наследуют свойства от Function.prototype, а также от Object.prototype.
Object.prototype.isPrototypeOf(Function.prototype);
Object.
propertyIsEnumerable
(var)Существует-ли свойство с указанным именем и будет ли оно перечислено циклом for/in
var o = new Object();
o.x = 3.14;
o.propertyIsEnumerable("x");
// true: x - локальное и перечислимое
o.propertyIsEnumerable("y");
// false: o не имеет свойства y
o.propertyIsEnumerable("toString");
// false: toString унаследованное свойство
Object.prototype.propertyIsEnumerable("toString");
// false: не перечислимое
Object.
toLocaleString
()Локализованное строчное представление объекта
Object.
toString
()Возвращает строковое представление объекта
Object.
valueOf
()Возвращает значение объекта
assign
(targetObj, sourceObj, ...)Поверхностное копирование значений свойств объектов в целевой.
вызывает методы чтения источников и методы записи приемника
просто присваивает значения свойств источника новым или существующим свойствам приемникам
не копирет свойства prototype источников
имена свойств JS могут быть строками или символами
определения свойств не копируются из источников
игнорирует при копировании ключи со значениями null и undefined
let x = { x: 12 };
let y = { y: 13 };
let z = { z: 14 };
let m = {};
Object.assign(m, x, y, z);
create
(prototype[, descriptors])Создает новый объект с указанным прототипом и свойствами.
New in version ECMAScript5.
// Создать объект, который имеет собственные свойства x и y и наследует свойство z
var p = Object.create({z:0}, {
x: {
value: 1,
writable: false,
enumerable:true,
configurable: true
},
y: {
value: 2,
writable: false,
enumerable:true,
configurable: true
},
});
defineProperties
(obj, descriptors)Создает или настраивает одно или более свойств в указанном объекте.
New in version ECMAScript5.
// Добавить в новый объект свойства
var p = Object.defineProperties({},
x: {
value: 0,
writable: false,
enumerable:true,
configurable: true
},
y: {
value: 1,
writable: false,
enumerable:true,
configurable: true
},
});
defineProperty
(obj, name, value)Создает или настраивает свойство в указанном объекте.
New in version ECMAScript5.
Object.defineProperty({}, 'n', {
value: v,
writable: false,
enumerable: true,
configurable:false
});
entries
(obj)Возвращает список списков, ключей и значений объекта
Object.values(
{
name: 'ilnurgi',
age: 30
}
)
// предварительно сортирует по ключам
// [['name', 'ilnurgi'], ['age', 30]]
Object.values(
['a', 'b', 'c']
)
// ['0', 'a'], ['1', 'b'], ['2', 'c']]
freeze
(obj)Делает указанный объект неизменяемым.
New in version ECMAScript5.
const immutableObject = Object.freeze({
foo: 123,
bar: 'buz'
});
immutableObject = {};
// error
immutableObject.foo = 456;
// not alllowed
immutableObject.bebebe = 'abc';
// not allowed
getOwnPropertyDescriptor
(obj, name)Возвращает атрибуты указанного свойства в указанном объекте.
New in version ECMAScript5.
pass
getOwnPropertyNames
(obj, name)Возвращает массив имен всех неунаследованных свойств в указанном объекте, включая свойства, не перечисляемые циклом for/in.
New in version ECMAScript5.
getPrototypeOf
(obj)Возвращает прототип указанного объекта.
New in version ECMAScript5.
var p = {}; // Обычный объект
Object.getPrototypeOf(p) // => Object.prototype
var o = Object.create(p) // Объект, наследующий объект p
Object.getPrototypeOf(o) // => p
is
(value1, value2)Проверяет равенство двух значений
Object.is(0, -0);
// false
0 === -0;
// true
Object.is(Nan, 0/0);
// true
Nan === 0/0;
// false
Object.is(Nan, Nan);
// true
NaN === NaN;
// false
isExtensible
(obj)Определяет, могут ли добавляться новые свойства в указанный объект.
New in version ECMAScript5.
var o = {}; // Создать новый объект
Object.isExtensible(o) // => true: он является расширяемым
Object.preventExtensions(o); // Сделать нерасширяемым
Object.isExtensible(o) // => false: теперь он нерасширяемый
isFrozen
(obj)Определяет, является ли указанный объект фиксированным.
New in version ECMAScript5.
isSealed
(obj)Определяет, является ли указанный объект нерасширяемым, а его свойства недоступными для настройки.
New in version ECMAScript5.
keys
(obj)Возвращает массив имен неунаследованных перечислимых свойств в указанном объекте.
New in version ECMAScript5.
Object.keys({x:1, y:2})
// ["x", "y"]
preventExtensions
(obj)Предотвращает возможность добавления новых свойств в указанный объект.
New in version ECMAScript5.
seal
(obj)Предотвращает возможность добавления новых и удаления существующих свойств в указанном объекте.
New in version ECMAScript5.
setPrototypeOf
(object, prototype)Присваивание значений свойству prototype
let x = { x: 12 };
let y = { y: 13 };
Object.setPrototypeOf(y, x);
values
(obj)Возвращает список значений объекта
Object.values(
{
name: 'ilnurgi',
age: 30
}
)
// предварительно сортирует по ключам
// ['ilnurgi', 30]
Object.values(
['a', 'b', 'c']
)
// ['a', 'b', 'c']
Дескриптор свойства – это обычный JavaScript-объект, описывающий атрибуты (и иногда значение) свойства.
В языке JavaScript существует два типа свойств.
Свойства-данные, имеющие значение и три атрибута: enumerable, writable и configurable.
{ value: /* любое значение, допустимое в языке JavaScript */, writable: /* true или false */, enumerable: /* true или false */, configurable: /* true или false */ }
Свойства с методами доступа, имеющие метод чтения и/или метод записи, а также атрибуты enumerable и configurable.
{ get: /* функция или undefined: взамен свойства value */, set: /* функция или undefined: взамен атрибута writable */, enumerable: /* true или false */, configurable: /* true или false */ }
объект реализующий протокол итератора, должен реалиовать метод next()
объект реализующий итерационный протокол, должен иметь свойство с символьным ключом Symbol.iterator, который должен возвращать объект-итератор
let obj = {
array: [1, 2, 3, 4, 5].
nextIndex: 0,
next: function(){
return this.nextIndex < this.array.length ?
{value: this.array[this.nextIndex++], done: false} :
{done: true}
}
}
let obj = {
array: [1, 2, 3, 4, 5].
nextIndex: 0,
[Symbol.iterator]: function(){
return {
array: this.array,
nextIndex: this.nextIndex,
next: function(){
return this.nextIndex < this.array.length ?
{value: this.array[this.nextIndex++], done: false} :
{done: true}
}
}
}
}