es6 symbol的通俗理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25842063/article/details/81675811

很多人在学习es6的时候一看到很陌生的单词就会避开性学习 本章我们来用最简单精简的方法讲解一下symbol

1.为什么要用symbol?

ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入Symbol的原因。

说白了就是你想用别人定义好的方法但是又怕命名起冲突啥的就要用它啦

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

划重点面试要考的以后别人问你js有几种原始数据类型啊,你就要加上symbol

2.我们要怎么用?

var mySymbol = Symbol();
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
var a = {
  [mySymbol]: 'Hello!'
};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
//mySymbol就是你要添加的属性名但是又怕起冲突的名字 看一眼代码是不是觉得很简单啦

3.有哪些注意事项?

  • Symbol函数前不能使用new命令因为它是一条单身狗 没有对象的它是一种类似于字符串的数据类型。
  • Symbol值不能与其他类型的值进行运算,会报错,但是可以显示的转换为字符串以及转换为布尔值
  • Symbol 作为属性名,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol属性名。

参考:http://es6.ruanyifeng.com/#docs/symbol 详细大家可以参考阮一峰老师的文章

猜你喜欢

转载自blog.csdn.net/qq_25842063/article/details/81675811
今日推荐