Symbol.toPrimitive
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since апÑÐµÐ»Ñ 2017 г..
Symbol.toPrimitive ÑвлÑеÑÑÑ Ñимволом (symbol), коÑоÑÑй опиÑÑÐ²Ð°ÐµÑ ÑвойÑÑво обÑекÑа как ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑзÑваеÑÑÑ Ð¿Ñи пÑеобÑазовании обÑекÑа в ÑооÑвеÑÑÑвÑÑÑее пÑимиÑивное знаÑение.
ÐнÑеÑакÑивнÑй пÑимеÑ
const object1 = {
[Symbol.toPrimitive](hint) {
if (hint === "number") {
return 42;
}
return null;
},
};
console.log(+object1);
// Expected output: 42
ÐпиÑание
С помоÑÑÑ ÑвойÑÑва Symbol.toPrimitive (коÑоÑое опиÑÑваеÑÑÑ ÐºÐ°Ðº ÑÑнкÑиÑ), обÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑиведÑн к пÑимиÑÐ¸Ð²Ð½Ð¾Ð¼Ñ ÑипÑ. ФÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ñо ÑÑÑоковÑм аÑгÑменÑом hint, коÑоÑÑй пеÑедаÑÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ñй Ñип пÑимиÑива. ÐнаÑением аÑгÑменÑа hint Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑиÑ
знаÑений "number", "string", и "default".
ÐÑимеÑÑ
ÐпиÑаннÑе ниже пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ ÐºÐ°Ðº Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑвойÑÑва Symbol.toPrimitive можно пÑивеÑÑи обÑÐµÐºÑ Ðº пÑимиÑÐ¸Ð²Ð½Ð¾Ð¼Ñ ÑипÑ.
// ÐбÑÐµÐºÑ Ð±ÐµÐ· ÑвойÑÑва Symbol.toPrimitive
var obj1 = {};
console.log(+obj1); // NaN
console.log(`${obj1}`); // "[object Object]"
console.log(obj1 + ""); // "[object Object]"
// ÐбÑÐµÐºÑ Ñо ÑвойÑÑвом Symbol.toPrimitive
var obj2 = {
[Symbol.toPrimitive](hint) {
if (hint == "number") {
return 10;
}
if (hint == "string") {
return "hello";
}
return true;
},
};
console.log(+obj2); // 10 -- желаемÑй Ñип (hint) - "number"
console.log(`${obj2}`); // "hello" -- желаемÑй Ñип (hint) - "string"
console.log(obj2 + ""); // "true" -- желаемÑй Ñип (hint) - "default"
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.toprimitive> |