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中的字符串参数
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中不兼容。

在解构赋值中,右手等号端的值是数组或对象("结构化"的值),二左手端通过模拟数组或对象字面量语法指定一个或多个变量。