在ES5及以前数据类型分为基本数据类型和引用数据类型,基本数据类型有五种,分别是String、Number、Boolean、Undefined、Null这五种,而引用数据类型实际上只有一种,那就是object对象,像数组这类的其实都属于object数据类型。
ES6新增了一种数据类型Symbol,它也属于基本数据类型,表示独一无二的值
Symbol的特点如下:
1.它属于基本数据类型
2.每次调用Symbol返回的值都是唯一的,因此最好用一个临时变量存储起来
let s1 = Symbol()let s2 = Symbol()console.log(s1 == s2) // false3..调用Symbol的时候没有new
4.它一般作为对象属性的标识符
let id = Symbol() let obj = { [id]: 'symbol' } console.log(obj[id])5.Symbol 作为对象属性的时候是不能被 for inObject.keysObject.values 遍历的
二、对象方法 1.Object.assign(target, source1, source2...)对象合并将 source1 和 source2 的属性复制到 target 上。
let s1 = { name:'小廖', age:18}let s2 = { sex:'男', age:99}let target = {}Object.assign(target,s1,s2)console.log(target) //输出{name:'小廖',age:99,sex:'男'}由上面我们可以看到,相同的属性会覆盖掉,后面对象的age覆盖了前面的age
重点:如果我不想两个对象当中相同的属性被覆盖怎么办?
我们就可以用ES6新增的Symbol作为对象的属性标识符,实例代码如下:
let id1 = Symbol()let id2 = Symbol()let s1 = { [id1]: 1, name: '小廖', age: 18}let s2 = { [id2]: 2, sex: '男', age: 99}let target = {}Object.assign(target, s1, s2)console.log(target) //输出{name:'小廖',age:99,sex:'男',Symbol():1,Symbol():2}在输出结果中我们可以看到,id的属性没有覆盖,因为被Symbol变为唯一的属性了
2.Object.keys(obj) //遍历对象属性,以数组的形式返回所有属性名 3.Object.values(obj) //遍历对象的属性值,以数组的形式返回所有属性值 三、销毁对象1.delete obj.属性 //删除属性
2.obj.属性 = " " //将属性值清空
前两种方法都没有将对象销毁,只是删除了对象的属性或者将属性值清空,如果要让对象不存在,那么应该使用 obj = null 才能销毁对象
四、ES6展开符展开符是ES6新增加的语法,一般的作用是用来合并数组或者对象,标识符是...,代码如下:
let arr1 = [4,5,6,7]let arr2 = [1,2,3,...arr1,8,9]console.log(arr2)//输出[1,2,3,4,5,6,7,8,9]由如上代码可见,我们用展开符将arr1数组的内容全都复制到了arr2数组中去了
还有一些情况,比如将展开符放在变量上
let [a, ...b] = [1, 2, 3, 4, 5, 6]console.log(b)//输出[2,3,4,5,6]所以展开符的用法是非常多样的,感兴趣可以自己测试一下。
五、对象数组的解构解构就是可以将对象或者数组中的属性拿出来,作为变量使用,而不需要引用全部的对象属性,格式为{ 属性名 } = 对象
let obj = { name: 'jack', age: 18}const { age } = objconsole.log(age)//输出18上面代码中将age属性从obj对象中单独解构出来进行引用。