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