Baseline Widely available
ÐбÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸Ð½Ð¸ÑиализиÑÐ¾Ð²Ð°Ð½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ new Object()
, Object.create()
или лиÑеÑалÑной (иниÑииÑÑÑÑей) ноÑаÑии. ÐниÑиализаÑÐ¾Ñ Ð¾Ð±ÑекÑа ÑÑо ÑазделÑннÑй запÑÑÑми ÑпиÑок Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более Ð¿Ð°Ñ Ð¸Ð¼Ñн ÑвойÑÑв и аÑÑоÑииÑÑемÑÑ
Ñ Ð½Ð¸Ð¼Ð¸ знаÑений, заклÑÑÑннÑÑ
в ÑигÑÑнÑе Ñкобки ({}
).
var o = {};
var o = { a: "foo", b: 42, c: {} };
var a = "foo",
b = 42,
c = {};
var o = { a: a, b: b, c: c };
var o = {
property: function ([parameters]) {},
get property() {},
set property(value) {},
};
ÐÐ¾Ð²Ð°Ñ Ð½Ð¾ÑаÑÐ¸Ñ Ð² ECMAScript 2015
ÐожалÑйÑÑа, пÑоÑмоÑÑиÑе ÑаблиÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑÑÐ¸Ñ Ð½Ð¾ÑаÑий. РнеподдеÑживаемом окÑÑжении, ÑÑи ноÑаÑии пÑиведÑÑ Ðº ÑинÑакÑиÑеÑкой оÑибке.
// СокÑаÑение имÑн ÑвойÑÑв (ES2015)
var a = "foo",
b = 42,
c = {};
var o = { a, b, c };
// СокÑаÑение имÑн меÑодов (ES2015)
var o = {
property([parameters]) {},
};
// ÐÑÑиÑление имÑн ÑвойÑÑв (ES2015)
var prop = "foo";
var o = {
[prop]: "hey",
["b" + "ar"]: "there",
};
ÐпиÑание
ÐниÑиализаÑÐ¾Ñ Ð¾Ð±ÑекÑа ÑÑо вÑÑажение, коÑоÑое опиÑÑÐ²Ð°ÐµÑ Ð¸Ð½Ð¸ÑиализаÑÐ¸Ñ Object
. ÐбÑекÑÑ ÑоÑÑоÑÑ Ð¸Ð· ÑвойÑÑв, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа. ÐнаÑÐµÐ½Ð¸Ñ ÑвойÑÑв обÑекÑов могÑÑ ÑодеÑжаÑÑ ÐºÐ°Ðº пÑимиÑивнÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ñак и дÑÑгие обÑекÑÑ.
ÐÑÑÑой обÑÐµÐºÑ Ð±ÐµÐ· ÑвойÑÑв Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñоздан ÑледÑÑÑим обÑазом:
Ðднако, пÑеимÑÑеÑÑво лиÑеÑалÑной или иниÑииÑÑÑÑей ноÑаÑии ÑÑо возможноÑÑÑ Ð±ÑÑÑÑо ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ Ñо ÑвойÑÑвами внÑÑÑи ÑигÑÑнÑÑ
Ñкобок. СоздаÑÑÑÑ Ð¿ÑоÑÑой ÑпиÑок Ð¿Ð°Ñ ÐºÐ»ÑÑ: знаÑение
, ÑазделÑннÑÑ
запÑÑой. СледÑÑÑий код ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ñ ÑÑÐµÐ¼Ñ Ð¿Ð°Ñами знаÑений и клÑÑи ÑÑо "foo"
, "age"
и "baz"
. ÐнаÑÐµÐ½Ð¸Ñ ÑÑиÑ
клÑÑей ÑÑÑока "bar"
, ÑиÑло 42
и дÑÑгой обÑекÑ.
var object = {
foo: "bar",
age: 42,
baz: { myProp: 12 },
};
ÐоÑÑÑпноÑÑÑ ÑвойÑÑв
ÐоÑле Ñого, как Ñоздали обÑекÑ, вÑ, веÑоÑÑно, Ð·Ð°Ñ Ð¾ÑиÑе пÑоÑиÑаÑÑ Ð¸Ð»Ð¸ измениÑÑ ÐµÐ³Ð¾. СвойÑÑва обÑекÑов могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ð¿Ñи помоÑи ÑоÑеÑной ноÑаÑии или квадÑаÑнÑÑ Ñкобок. СмоÑÑиÑе property accessors Ð´Ð»Ñ Ð´ÐµÑалÑной инÑоÑмаÑии.
object.foo; // "bar"
object["age"]; // 42
object.foo = "baz";
ÐпÑеделение ÑвойÑÑв
ÐÑ Ñже ÑаÑÑмоÑÑели, как обÑÑвиÑÑ ÑвойÑÑва, иÑполÑзÑÑ ÑинÑакÑÐ¸Ñ Ð¸Ð½Ð¸ÑиализаÑии. ÐаÑаÑÑÑÑ, в коде поÑвлÑÑÑÑÑ ÑвойÑÑва, коÑоÑÑе Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе помеÑÑиÑÑ Ð² обÑекÑ. ÐÑ ÑвидиÑе ÑледÑÑÑий код:
var a = "foo",
b = 42,
c = {};
var o = {
a: a,
b: b,
c: c,
};
С ECMAScript 2015 поÑвилаÑÑ ÐºÐ¾ÑоÑÐºÐ°Ñ Ð½Ð¾ÑаÑиÑ, ÑпоÑÐ¾Ð±Ð½Ð°Ñ Ð´Ð¾ÑÑиÑÑ Ñого же:
var a = "foo",
b = 42,
c = {};
// СокÑаÑение имÑн ÑвойÑÑв (ES2015)
var o = { a, b, c };
// ÐнаÑе говоÑÑ,
console.log(o.a === { a }.a); // true
ÐовÑоÑение имÑн ÑвойÑÑв
Ðогда иÑполÑзÑÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе имена ÑвойÑÑв, вÑоÑое ÑвойÑÑво пеÑезапиÑÐµÑ Ð¿ÐµÑвое.
var a = { x: 1, x: 2 };
console.log(a); // {x: 2}
Ð ÑÑÑогом Ñежиме ECMAScript 5, повÑоÑение имÑн ÑвойÑÑв бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинÑÑо как SyntaxError
. С введением вÑÑиÑлÑемÑÑ
имÑн ÑвойÑÑв и поÑвлением возможноÑÑи ÑоздаваÑÑ Ð´ÑбликаÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°, ECMAScript 2015 ÑбÑал ÑÑо огÑаниÑение.
function haveES2015DuplicatePropertySemantics() {
"use strict";
try {
({ prop: 1, prop: 2 });
// Ðе бÑÐ´ÐµÑ Ð¾Ñибки, повÑоÑение имÑн доÑÑÑпно в ÑÑÑогом Ñежиме
return true;
} catch (e) {
// ÐÑÐ´ÐµÑ Ð¾Ñибка, дÑбликаÑÑ Ð·Ð°Ð¿ÑеÑÐµÐ½Ñ Ð² ÑÑÑогом Ñежиме
return false;
}
}
ÐпиÑание меÑодов
СвойÑÑво обÑекÑа Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° function, getter или setter.
var o = {
property: function ([parameters]) {},
get property() {},
set property(value) {},
};
Ð ECMAScript 2015, доÑÑÑпна коÑоÑÐºÐ°Ñ Ð½Ð¾ÑаÑиÑ, поÑÑÐ¾Ð¼Ñ Ñлово "function" более не обÑзаÑелÑно.
// СокÑаÑение имÑн меÑодов (ES2015)
var o = {
property([parameters]) {},
*generator() {},
};
Ð ECMAScript 2015 еÑÑÑ ÑпоÑоб кÑаÑко обÑÑвиÑÑ ÑвойÑÑва, ÑÑими знаÑениÑми ÑвлÑÑÑÑÑ Ð³ÐµÐ½ÐµÑаÑоÑÑ ÑÑнкÑий:
var o = {
*generator() {
...........
}
};
ЧÑо ÑквиваленÑно ÑледÑÑÑей ES5-подобной ноÑаÑии (но оÑмеÑÑÑе, ÑÑо ECMAScript 5 не ÑодеÑÐ¶Ð¸Ñ Ð³ÐµÐ½ÐµÑаÑоÑов):
var o = {
generator: function* () {
...........
}
};
ÐÐ»Ñ Ð±Ð¾Ð»ÑÑей инÑоÑмаÑии и пÑимеÑов ÑмоÑÑи method definitions.
ÐÑÑиÑлÑемÑе имена ÑвойÑÑвÐаÑÐ¸Ð½Ð°Ñ Ñ ECMAScript 2015, ÑинÑакÑÐ¸Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²ÑÑиÑлÑемÑе имена ÑвойÑÑв. ÐÑо позволÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð² Ñкобки []
вÑÑажение, коÑоÑое бÑÐ´ÐµÑ Ð²ÑÑиÑлено, как Ð¸Ð¼Ñ ÑвойÑÑва. ÐÑо поÑ
оже на ÑкобоÑнÑÑ Ð½Ð¾ÑаÑÐ¸Ñ ÑинÑакÑиÑа property accessor, коÑоÑÑÑ Ð²Ñ, веÑоÑÑно, Ñже иÑполÑзовали, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ Ð¸ задаÑÑ ÑвойÑÑво. ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑй ÑпоÑоб Ñ Ð»Ð¸ÑеÑалÑнÑми обÑекÑами:
// ÐÑÑиÑлÑемое Ð¸Ð¼Ñ ÑвойÑÑва (ES2015)
var i = 0;
var a = {
["foo" + ++i]: i,
["foo" + ++i]: i,
["foo" + ++i]: i,
};
console.log(a.foo1); // 1
console.log(a.foo2); // 2
console.log(a.foo3); // 3
var param = "size";
var config = {
[param]: 12,
["mobile" + param.charAt(0).toUpperCase() + param.slice(1)]: 4,
};
console.log(config); // {size: 12, mobileSize: 4}
Spread-ÑвойÑÑва
Rest/Spread ÑвойÑÑво ECMAScript пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ (stage 3) добавлÑÑÑ spread ÑвойÑÑва в лиÑеÑалÑнÑÑ Ð½Ð¾ÑаÑиÑ. Ðно копиÑÑÐµÑ ÑобÑÑвеннÑе пеÑеÑиÑлÑемÑе ÑвойÑÑва из пÑедÑÑавленного обÑекÑа в новÑй.
ÐовеÑÑ
ноÑÑное копиÑование (иÑклÑÑÐ°Ñ prototype) или ÑлиÑние обÑекÑов ÑепеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð±Ð¾Ð»ÐµÐµ коÑоÑкого ÑинÑакÑиÑа, Ñем Object.assign()
.
var obj1 = { foo: "bar", x: 42 };
var obj2 = { foo: "baz", y: 13 };
var clonedObj = { ...obj1 };
// ÐбÑÐµÐºÑ { foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 };
// ÐбÑÐµÐºÑ { foo: "baz", x: 42, y: 13 }
ÐамеÑÑÑе, ÑÑо Object.assign()
вÑзÑÐ²Ð°ÐµÑ setters, Ñогда как опеÑаÑÐ¾Ñ spread неÑ.
ÐбÑÑвление ÑвойÑÑва в виде __proto__: value
или "__proto__": value
не ÑоздаÑÑ ÑвойÑÑва Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ __proto__
. ÐмеÑÑо ÑÑого, еÑли пÑедоÑÑавлÑемое знаÑение обÑÐµÐºÑ Ð¸Ð»Ð¸ null
, оно Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ [[Prototype]]
Ñоздаваемого обÑекÑа на ÑÑо знаÑение. (ÐÑли знаÑение не обÑÐµÐºÑ Ð¸Ð»Ð¸ null, обÑÐµÐºÑ Ð½Ðµ измениÑÑÑ.)
var obj1 = {};
assert(Object.getPrototypeOf(obj1) === Object.prototype);
var obj2 = { __proto__: null };
assert(Object.getPrototypeOf(obj2) === null);
var protoObj = {};
var obj3 = { __proto__: protoObj };
assert(Object.getPrototypeOf(obj3) === protoObj);
var obj4 = { __proto__: "not an object or null" };
assert(Object.getPrototypeOf(obj4) === Object.prototype);
assert(!obj4.hasOwnProperty("__proto__"));
ТолÑко одно изменение prototype ÑазÑеÑено ÑеÑез лиÑеÑалÑное обÑÑвление обÑекÑа: неÑколÑко изменений prototype вÑзовÑÑ ÑинÑакÑиÑеÑкÑÑ Ð¾ÑибкÑ.
ÐбÑÑвление ÑвойÑÑва не ÑеÑез "двоеÑоÑие" не Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ prototype: ÑÑо опиÑание бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð¸Ð´ÐµÐ½ÑиÑно ÑÐ°ÐºÐ¾Ð¼Ñ Ð¶Ðµ обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑвойÑÑва Ñ Ð¸ÑполÑзованием лÑбого дÑÑгого имени.
var __proto__ = "variable";
var obj1 = { __proto__ };
assert(Object.getPrototypeOf(obj1) === Object.prototype);
assert(obj1.hasOwnProperty("__proto__"));
assert(obj1.__proto__ === "variable");
var obj2 = {
__proto__() {
return "hello";
},
};
assert(obj2.__proto__() === "hello");
var obj3 = { ["__prot" + "o__"]: 17 };
assert(obj3.__proto__ === 17);
ÐиÑеÑалÑÐ½Ð°Ñ Ð½Ð¾ÑаÑÐ¸Ñ vs JSON
ÐиÑеÑалÑÐ½Ð°Ñ Ð½Ð¾ÑаÑÐ¸Ñ Ð½Ðµ Ñо же Ñамое, ÑÑо и JavaScript Object Notation (JSON). ХоÑÑ Ð¾Ð½Ð¸ и вÑглÑдÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно, ÑÑÑеÑÑвÑÐµÑ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸:
"property": value
. ÐÐ¼Ñ ÑвойÑÑва должно бÑÑÑ Ð·Ð°ÐºÐ»ÑÑено в двойнÑе кавÑÑки и обÑÑвление не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑокÑаÑено.true
, false
, null
или дÑÑгими (JSON) обÑекÑами.Date
бÑÐ´ÐµÑ ÑÑÑокой поÑле JSON.parse()
.JSON.parse()
оÑÐºÐ»Ð¾Ð½Ð¸Ñ Ð²ÑÑиÑлÑемÑе имена ÑвойÑÑв и веÑнÑÑ Ð¾ÑибкÑ.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4