博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6系列_10之Symbol在对象中的作用
阅读量:6944 次
发布时间:2019-06-27

本文共 1367 字,大约阅读时间需要 4 分钟。

在ES5中 对象属性名都是字符串,这容易造成属性名的冲突,比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突,于是 ES6 引入了Symbol。Symbol是一种新的原始数据类型,表示独一无二的值。它是继undefinednull、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)六种数据类型之后的第七种数据类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

1.声明Symbol

Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

var f= Symbol();//Symbol()
var f= Symbol('foo');//Symbol(foo)
// 没有参数的情况let s1 = Symbol();let s2 = Symbol();s1 === s2 // false// 有参数的情况let s1 = Symbol('foo');let s2 = Symbol('foo');s1 === s2 // false

注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。

s1s2都是Symbol函数的返回值,而且参数相同,但是它们是不相等的。

2.Symbol在对象中的应用

Symbol作为属性名:

let mySymbol = Symbol();// 第一种写法let a = {};a[mySymbol] = 'Hello!';// 第二种写法let a = {  [mySymbol]: 'Hello!'};// 第三种写法let a = {};Object.defineProperty(a, mySymbol, { value: 'Hello!' });// 以上写法都得到同样结果a[mySymbol] // "Hello!"

赋值-括号形式:

a[mySymbol]='web';

3.Symbol对象元素的保护作用

在对象中有很多值,但是循环输出时,并不希望全部输出,那我们就可以使用Symbol进行保护。

没有进行保护的写法:

var obj={name:'小明',skill:'web',age:18};for (let item in obj){    console.log(obj[item]);}

现在我不想别人知道我的年龄,这时候我就可以使用Symbol来进行循环保护。

let obj={name:'小明',skill:'web'};let age=Symbol();obj[age]=18;for (let item in obj){    console.log(obj[item]);//小明、web} console.log(obj[age]);

 待续.....

posted on
2018-12-04 23:36 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wfaceboss/p/10068369.html

你可能感兴趣的文章
request.getParameter(“参数名”) 中文乱码解决方法
查看>>
Ambari-Blueprint介绍
查看>>
可编辑ztree节点的增删改功能图标控制---已解决
查看>>
Android-自己定义标题栏
查看>>
C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
查看>>
LeetCode【8】. String to Integer (atoi) --java实现
查看>>
微信小程序开发教程目录
查看>>
Java进阶路线图
查看>>
C - The C Answer (2nd Edition) - Exercise 1-4
查看>>
java基本类型(数值范围):浮点的底层表示定义,float计算快一些
查看>>
[React Native] change port when running react native
查看>>
[转] 利用BLKTRACE分析IO性能
查看>>
easyui combobox下拉列表的多选值
查看>>
Xamarin iOS教程之编辑界面编写代码
查看>>
H5 和移动端 WebView 缓存机制解析与实战
查看>>
ORA-38760: This database instance failed to turn on flashback database
查看>>
【DB】MYSQL相关细节
查看>>
C#中的反射
查看>>
一个三年Android开发的总结-开篇
查看>>
atitit.基于http json api 接口设计 最佳实践 总结o7
查看>>