数据类型
基本数据类型
string number boolean null undefined
复杂数据类型
Object Array Math Date String Number Boolean
后三个是包装类...
why
ES5的对象属性名都是字符串,很容易造成属性名冲突。
比如,使用了一个他人提供的对象,想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。
如果有一种机制,保证每个属性的名字都是独一无二的,这样就从根本上防止了属性名冲突。
- Symbol 表示独一无二的值
- 定义
let sym = Symbol(描述符)
描述符 => 描述当前symbol表示什么意义
案例1,判断两个symbol是否全等于
function test2(){
let num = 100
let str = 'helloworld'
let sname1 = Symbol('name')
let sname2 = Symbol('name')
console.log( typeof num)
console.log( typeof str)
console.log( typeof sname1)
console.log(sname1 === sname2)
}
test2()
输出为false
不全等于
案例2,通过symbol+展开运算符把一个对象放入另一个对象里面
function test1() {
let num = 100
let str = 'helloworld'
let sname1 = Symbol('name')
let sname2 = Symbol('name')
let obj = {
sname1: 'jack',
age: 18,
}
let newObj = {
...obj,
sname2: 'rose',
}
}
不使用symbol,名字会重复导致报错