深入理解ES6-第6章 Symbol/符号

创建Symbol

let firstName = Symbol();
let person = {};
person[firstName]="fly";
//Symbol是原始值,调用new Symbol()会导致程序报错

Symbol函数接受可选参数,用于描述,不可用于属性访问。

let firstName = Symbol("first name");
let person = {};

person[firstName] = "Nicholas";

console.log("first name" in person);        // false
console.log(person[firstName]);             // "Nicholas"
console.log(firstName);                     // "Symbol(first name)"

使用Symbol

let firstName = Symbol("first name");

// use a computed object literal property
let person = {
    [firstName]: "Nicholas"
};

// make the property read only
Object.defineProperty(person, firstName, { writable: false });

console.log(person[firstName]);     // "Nicholas"

全局Symbol注册表

创建一个可共享的Symbol:
Symbol.for();

没有就创建,有的话调用。

在全局注册表中检索与Symbol有关的键:
Symbol.keyfor();

全局注册表是一个类似全局作用域的共享环境。

Symbol与强制类型转换

let uid = Symbol.for("uid"),
    desc = String(uid);

console.log(desc);              // "Symbol(uid)"

Symbol不可拼接或转换为字符串或转换为数字。

Symbol属性检索

Object.keys():返回所有可列举属性名
Object.getOwnPropertyNames():返回所有属性名,不管是否可枚举

Well-known Symbol暴露内部操作

Symbol.hasInstance方法

函数的方法,确定对象是否为函数的实例。

obj instanceof Array;
//等价于
Array[Symbol.hasInstance](obj);
Object.defineProperty(MyObject, Symbol.hasInstance, {
    value: function(v) {
        return false;
    }
});
Symbol.方法作用参数返回值 [有]/[无]
hasInstance检测继承信息对象true
toPrimitive返回对象原始值//valueOf//toString()原始值
match比较字符串字符串匹配元素的数组/null
replace替换字符串原始字符串(,替换字符串)字符串
search定位子串字符串匹配到返回索引或-1
split分解字符串字符串返回包含分解后片段的数组
Symbol.属性表示属性值
isConcatSpreadable配置某对象作为Array.prototype.concat()方法的参数时是否展开其数组元素属性为布尔值,为true,则表示对象有length属性和数字键
toStringTag创建对象描述
unscopables定义不可被with引用的对象属性名称的对象集合
Symbol.toPrimitive()
数字模式优先级排序:
  1. 调用valueOf()方法,如果结果为原始值,则返回。
  2. 否则,调用toString方法,如果结果为原始值,则返回。
  3. 如果再无可选值,则抛出错误。
字符串模式优先级排序:
  1. 调用toString()方法,如果结果为原始值,则返回。
  2. 否则,调用valueOf()方法,如果结果为原始值,则返回。
  3. 如果再无可选值,则抛出错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值