symbol和解构赋值
该文章的内容不限于标题的两个。。
符号Symbol
符号(Symbol)是ES6新增的一种原始类型(primitive data type),用作非字符串的属性名。我们知道,JavaScript的基础类型Object是一个属性(Property)的无序集合,其中每个属性(Property)都有一个名字(name)和值(value)。
在ES6之前属性名必须是字符串,ES6后符号也可以作为属性名。
查了下,发现Symbol在IE浏览器中不兼容的。。:)))
let strname = "string name";
let symname = Symbol("propname");
console.log(typeof strname); // => "string"
console.log(typeof symname); // => "symbol"
let o = {};
o[strname] = 1;
o[symname] = 2;// 定义属性
console.log(o[strname]);
console.log(o[symname]); // 访问属性
创建Symbol对象
Symbol类型没有字面量语法,而且不支持new Symbol()语法。
- 构造函数 Symbol([description])
- 参数
- 可选地接受一个字符串参数,返回唯一的符号值
- 返回值
- 该函数的返回值永远不会相同,即便传入同一个参数
- 参数
let s1 = symbol("univalue");
s1.toString(); // => "Symbol(univalue)"
let s2 = symbol("univalue");
s2.toString(); // => "Symbol(univalue)"
s1 == s2; //=> false!!
s1 === s2; //-> false!
静态函数
能够进行跨文件共享
- Symbol.for(String);
- 接收字符串参数,返回一个与该字符串关联的符号值
- Symbol.keyFor(symbol);
- 返回传入参数symbol中的字符串参数
- Symbol.for(String);
let s = Symbol.for("shared");
let a = Symbol.for("shared");
s == a; // => true
s === a; // => true
Symbol.keyFor(s); // "shared"
属性
- Symbol.length 值为0
- Symbol.prototype 原型
解构赋值Destructuring assignment
ES6实现了一种复合声明与赋值语法,称为解构赋值。
同样在IE中不兼容。
在解构赋值中,右手等号端的值是数组或对象("结构化"的值),二左手端通过模拟数组或对象字面量语法指定一个或多个变量。