admin管理员组文章数量:1794759
ES6: 符号类型
引入原因:
- 实现私有属性 let s = Symbol() let obj = {[s]: ‘hello world’}; console.log(obj.s); //undefined
- 符号值唯一 let s = Symbol() let m = Symbol() console.log(s === m)
创建:
- 不能用字面量形式创建
- 使用Symbol(desc)函数创建,不需要添加new
- Symbol.for(key)在全局符号注册表中查找key符号值,如果找到就返回,没找到就创建一个新的符号值
- Symbol.keyFor(symbol): 返回符号值的key
枚举:
- 符号类型的key是不能被枚举的,Object.keys()以及Object.getOwnPropertyNames()都不能返回符号类型的key
- Object.getOwnPropertySymbols()则会返回对象中所有符号类型的key
共享符号值:
- Symbol.for(desc): 在全局符号注册表中查找描述为desc的符号,如果找到,返回这个符号值,如果没有,则创建一个新的符号值并返回
- Symbol.keyFor(var): 返回全局符号注册表中符号值为var的desc.
转换:
- 不能强制转化为字符串或者数值类型, 所以 symbol + “hello” 或者 symbol/1 会报错
- 可以调用String()来转换
知名符号:
Symbol.hasInstance(obj): 判断obj是不是当前函数的实例,如ArraySymbol.hasInstance; 可以通过以下代码改变instanceof的默认行为: Object.defineProperty(MyObject, Symbol.hasInstance, {
代码语言:javascript代码运行次数:0运行复制 value: function(v) {
return false;
}
});
Symbol.isConcatSpreadable let collection = {
代码语言:javascript代码运行次数:0运行复制 0: "Hello",
1: "world",
length: 2,
[Symbol.isConcatSpreadable]: true
}; let messages = [ “Hi” ].concat(collection); console.log(messages.length); // 3 console.log(messages); // [“hi”,”Hello”,”world”]
Symbol.match 、 Symbol.replace 、 Symbol.search 、Symbol.split
Symbol.toPrimitive function Temperature(degrees) {
代码语言:javascript代码运行次数:0运行复制 this.degrees = degrees;
} Temperature.prototype[Symbol.toPrimitive] = function(hint) {
代码语言:javascript代码运行次数:0运行复制 switch (hint) {
case "string":
return this.degrees + "\\u00b0"; // 温度符号
case "number":
return this.degrees;
case "default":
return this.degrees + " degrees";
}
}; let freezing = new Temperature(32); console.log(freezing + “!”); // “32 degrees!” console.log(freezing / 2); // 16 console.log(String(freezing)); // “32°”
Symbol.toStringTag
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent 删除字符串consolekey对象函数age[Symbol.toStringTag] = ‘Node’; ‘Node’ age { age: 32, [Symbol(Symbol.toPrimitive)]: [Function], [Symbol(Symbol.toStringTag)]: ‘Node’ } age.toString(); ‘[object Node]’
本文标签: ES6 符号类型
版权声明:本文标题:ES6: 符号类型 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754943431a1708447.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论