前言:
ES5中对象的属性名都是字符串,容易造成重名,污染环境
一、什么是 Symbol?
Symbol 是 ES6 中引入的一种新的基本数据类型,用于表示一个独一无二的值。它是JavaScript中的第七种数据类型,与undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、Object(对象)并列。
二、Symbol 的特点
- Symbol属性对应的值是唯一的,解决命名冲突问题
let symbol = Symbol("one")
let symbol1 = Symbol("one")
console.log(symbol)
// 结果:Symbol("one")
- Symbol值不能与其他数据进行计算,包括同字符串拼串
let a = Symbol()
let b = a+1
console.log(b)
// 结果:报错
- for in, for of遍历时不会遍历symbol属性。
let symbol = Symbol();
let obj = {};
obj[symbol] = 'hello';
for(var i in obj){
console.log(obj[i])
}
// 结果:报错
三、Symbol 的使用
- 调用Symbol函数得到symbol值
let symbol = Symbol();
let obj = {};
obj[symbol] = 'hello';
for(var i in obj){
console.log(obj[i])
}
// 结果:报错
- 传参标识
let symbol = Symbol('one');
let symbol2 = Symbol('two');
console.log(symbol);// Symbol('one')
console.log(symbol2);// Symbol('two')
- 内置Symbol值
- 除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。
- Symbol.iterator
- 对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)
- symbol != symbol symbol是唯一的
let one = Symbol("one")
let two = Symbol("one")
console.log(one == two)
// 结果:false
- 创建symbol的属性值
let symbol = Symbol()
let obj = {name:"张三疯",age:18}
- fon in for of 不会遍历symbol
obj[symbol] = "123"
console.log(obj)
for(var v in obj){
console.log(obj[v])
}
// 结果:报错
- symbol 值不能与其他类型的值进行运算
let obj = {
toString(){
return "123"
}
}
let a = Symbol(obj)
console.log(a+'1234')
// 结果:报错
- Symbol 值可以显式转为字符串。
let obj = {
toString(){
return "123"
}
}
let a = Symbol(obj)
console.log(String(a))
// Symbol(123)
console.log(a == String(a))
// false
总结:
以上就是 ES6中新增的 Symbol 的详解与用法,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog