今天更两篇,嘿嘿
想到什么就更什么,随缘更新大法。
这次讲一下ES6的新增数据类型Symbol,以前我们是五大基本数据类型,字符串(String)、数字(Number)、布尔值(Boolean)、未定义(Undefined)、对空(Null),现在成员喜加一。
Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值,最大的用法是用来定义对象的唯一属性名,那我们就试一试嘛。
Symbol 函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。可以接受一个字符串作为参数,为新创建的 Symbol提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分。
上面那句话可要记好了,圈起来,要考。
let str = Symbol('abc')
console.log(str);
此时此刻,代码看着很正常,没有报错,那我们看看控制台。
注意了,他打印的并不只是abc,上面说过
可以接受一个字符串作为参数,为新创建的 Symbol 提供描述
那么我们的abc其实就是个描述并不是它的值,接下来我们验证一下他的唯一性。
let str1 = Symbol('abc')
console.log(str1);
console.log(str===str1);
我们写一个同样描述的Symbol,将两个进行一个判断
可以看到,显示的内容我们看着是一样的,但是我们两个Symbol相比之后返回的是一个false,
这边也验证出了他的唯一性,接下来我们根据上面说到的它的最大用法去写个小例子看一看。
var str = Symbol('a1')
var obj = {
// 使用变量去定义属性名需用[]包起来
[str]:'111',
a2:'222'
}
那么,我们想拿到222很简单,使用.直接获取obj.a2
那我们拿111该怎么拿,它的属性名是个变量obj.str肯定不行,想想我们forin循环,obj[str]可以拿到。
那我们都能写obj[str],我们能写obj[Symbol(‘a1’)]吗,当然~~
不行!
上面我们说过了,Symbol(‘abc’)不等于Symbol(‘abc’),也就是描述一样,两个数据也不相等,那就是即使你写两遍,自己也不会等于自己,虽然 [] 里的 Symbol(‘a1’) 看着一样,但它们始终是不相等的,所以找不到,想要找到他,只能使用被赋值的那个变量。
所以,你学会了吗