ECMAScript6-Symbol


简述

ES5的对象属性名都是字符串,为了 不引起属性名的混用和保证属性名的独一无二,进而引入了Symbol。
Symbol是javascript的第7种数据类型,表示独一无二的值

var s = Symbol();
console.log(typeof s);//'symbol'

Symbol函数不能使用new命令,否则会报错.因为Symbol是一种原始类型值,不是对象.

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

var s = Symbol('lalal');
console.log(s); // Symbol(lalal)

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

// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol();

s1 === s2 // false

// 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo");

s1 === s2 // false

Symbol不能与其他类型的值进行运算,会报错

var sym = Symbol('My symbol');

String(sym) // 'Symbol(My symbol)'
sym.toString() // 'Symbol(My symbol)'
var sym = Symbol();
Boolean(sym) // true
!sym  // false

作为属性名的Symbol

let width = Symbol(),
    height = Symbol();
let o = {};
o[width] = '200px';
console.log(o); // Object {Symbol(): "200px"}
console.log(o.width); // undefined
console.log(o[width]); //200px

//注1:Symbol不能运用点运算符
o.width = '1280px';
console.log(o); //Object {width: "1280px", Symbol(): "200px", Symbol(): "300px", Symbol(top): 0}

//注2:另一种赋值的方法,使用Object.defineProperty()的方法
Object.defineProperty(o, height, {
    value: '300px'
}); // Object {width: "1280px", Symbol(): "300px"}
console.log(o);

//注3:另一种定义Symbol值的方式
o[Symbol('top')] = 0;
console.log(o); //Object {width: "1280px", Symbol(): "300px", Symbol(top): 0}
console.log(o[top]); //undefined;
console.log(o[Symbol('top')]); //undefined;??why,如何取值呢

推荐阅读更多精彩内容

  • 首先,1.MVC,全称是:Model View Controller ,是模型、视图、控制器。是一种常见的客户端软...
    1693c7e88afe阅读 500评论 2 2
  • 窗外,有阳光,透过窗户照进了屋子,一束光,静静地,暖暖地,和我呆在了一起。 独自坐在窗前,听着响亮清脆的啼叫声,想...
    乌鸦一只阅读 74评论 0 2
  • 2017年04月15日 (农历:三月十九)星期六晴 【早起】4:45 【学习】 1.通读《大学》1遍 ,累计27遍...
    中和lxy阅读 44评论 0 1
  • 他的要求很少:孝心+勤劳 问他是否嫌我年龄小,他笑笑说刚刚好,我不懂事也没关系,他说他会包容我 为我做了第一顿饭(...
    一只萌萌的boy阅读 105评论 0 0