前言:ES5中对象的属性名都是字符串,容易造成重名,污染环境
Symbol:
概念:
ES6中添加了一种原始数据类型(已有的原始数据类型:String,Number,Boolean,Null,Undefined,Object)
特点:
1、Symbol属性对应的值是唯一的,解决命名冲突问题
2、Symbol值不能与其他数据进行计算,包括和字符串拼串
3、for in、for of遍历时不会遍历Symbol属性
使用:
1、调用Symbol函数得到symbol值
let symbol = Symbol() let obj = {} obj[Symbol] = 'hello'
2、传参标识
let symbol1 = Symbol('one') let symbol2 = Symbol('two') consolo.log(symbol1) // Symbol('one') consolo.log(symbol2) // Symbol('two')
3、内置Symbol值
*除了自己定义使用的Symbol值,ES6还提供11个内置的Symbol值,指向语言内部使用的方法
-Symbol.iterator
*对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Symbol</title>
</head>
<body>
<script type="text/javascript">
let obj = {
username:'onedean',
age:20
}
let symbol = Symbol()
obj[symbol] = 'hello'
console.log(obj) // {username: "onedean", age: 20, Symbol(): "hello"}
//for in,for of遍历时不会遍历symbol属性
for(let i in obj){
console.log(i) // username age
}
//Symbol属性对应的值是唯一的
let symbol1 = Symbol()
let symbol2 = Symbol()
console.log(symbol1,symbol2,symbol1 == symbol2) // Symbol() Symbol() false
//Symbol可以传参标识
let symbol3 = Symbol('one')
let symbol4 = Symbol('two')
console.log(symbol3,symbol4) // Symbol(one) Symbol(two)
</script>
</body>
</html>