ES6 Symbol在对象中的作用实例分析
本文实例讲述了ES6Symbol在对象中的作用。分享给大家供大家参考,具体如下:
在ES5中对象属性名都是字符串,这容易造成属性名的冲突,比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin模式),新方法的名字就有可能与现有方法产生冲突,于是ES6引入了Symbol。Symbol是一种新的原始数据类型,表示独一无二的值。它是继undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)六种数据类型之后的第七种数据类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
1.声明Symbol
Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。
varf=Symbol();//Symbol() varf=Symbol('foo');//Symbol(foo)
//没有参数的情况 lets1=Symbol(); lets2=Symbol(); s1===s2//false //有参数的情况 lets1=Symbol('foo'); lets2=Symbol('foo'); s1===s2//false
注意,Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的。
s1和s2都是Symbol函数的返回值,而且参数相同,但是它们是不相等的。
2.Symbol在对象中的应用
Symbol作为属性名:
letmySymbol=Symbol(); //第一种写法 leta={}; a[mySymbol]='Hello!'; //第二种写法 leta={ [mySymbol]:'Hello!' }; //第三种写法 leta={}; Object.defineProperty(a,mySymbol,{value:'Hello!'}); //以上写法都得到同样结果 a[mySymbol]//"Hello!"
赋值-括号形式:
a[mySymbol]='web';
3.Symbol对象元素的保护作用
在对象中有很多值,但是循环输出时,并不希望全部输出,那我们就可以使用Symbol进行保护。
没有进行保护的写法:
varobj={name:'小明',skill:'web',age:18}; for(letiteminobj){ console.log(obj[item]); }
现在我不想别人知道我的年龄,这时候我就可以使用Symbol来进行循环保护。
letobj={name:'小明',skill:'web'}; letage=Symbol(); obj[age]=18; for(letiteminobj){ console.log(obj[item]);//小明、web } console.log(obj[age]);
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。