ES6新增基本数据类型Symbol

57 阅读1分钟

数据类型

         基本数据类型
            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) // number
                console.log( typeof str) // string
                console.log( typeof sname1) // symbol

                console.log(sname1 === sname2)
            }
            test2()
            输出为false
            不全等于

案例2,通过symbol+展开运算符把一个对象放入另一个对象里面

	function test1() {
				let num = 100 // number
				let str = 'helloworld' // string
				let sname1 = Symbol('name') //adsfaewrqwerawer
				let sname2 = Symbol('name') //kasdfawerafasdfa

				let obj = {
					sname1: 'jack',
					age: 18,
				}

				let newObj = {
					...obj,
					// name:'jack',
					// age:18,
					sname2: 'rose',
				}
			}
                        不使用symbol,名字会重复导致报错