码迷,mamicode.com
首页 > 其他好文 > 详细

《深入理解ES6》之Symbol

时间:2017-08-15 23:06:00      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:arch   元素   错误   派生类   有关   调用   地方   instance   布尔   

  ES6在原有的5中原始类型:字符串、数字型、布尔型、null和undefined的基础上,引入了一种原始类型Symbol(可以通过typeof检测变量是否为Symbol类型)。

Symbol的使用方法

  所有使用可计算属性名的地方,都可以使用Symbol。

let firstName=Symbol("first name");
let person={
    [firstName]:"jia"
};
Object.defineProperty(person,firstName,{writable:false});
let lastName=Symbol("last name");
Object.defineProperties(person,{
    [lastName]:{
        value:"nuo",
        writable:false
    }
});
console.log(person[firstName]);//jia
console.log(person[lastName]);//nuo

Symbol共享体系

  ES6提供了可以随时访问的全局Symbol注册表,使用Symbol.for()方法。它只接受一个参数。可以用Symbol.keyFor()方法在Symbol全局注册表中检索与Symbol有关的键。

let uid=Symbol.for("uid");
let object={
    [uid]:"12345"
};
console.log(object[uid]);//12345
console.log(uid);//Symbol(uid)
let uid2=Symbol.for("uid");
console.log(uid===uid2);//true
console.log(object[uid2]);//12345
console.log(uid2);//Symbol(uid)
console.log(Symbol.keyFor(uid));//uid
console.log(Symbol.keyFor(uid2));//uid
let uid3=Symbol("uid");
console.log(Symbol.keyFor(uid3));//undefined

Symbol与强制类型转换

  其它类型没有与Symbol逻辑等价的值。所以将Symbol与字符串拼接或者与数字运算都会报错。使用console.log()方法来输出Symbol的内容,它会调用Symbol的String()方法并输出有用的信息。

let uid=Symbol.for("uid"),
    desc=String(uid);
console.log(desc);//Symbol(uid)
sum=desc/1;//报错
sum2=desc+"";//报错

well-known Symbol操作

well-known Symbol 详细意思
Symbol.hasInstance 一个在执行instanceof时调用的内部方法,用于检测对象的继承信息。
Symbol.isConcatSpreadable 一个布尔值,用于表示当传递一个集合作为Array.prototype.concat()方法的参数时,是否应该讲集合内的元素规整到同一个层级。
Symbol.iterator 一个返回迭代器的方法。
Symbol.match 一个在调用String.prototype.match()方法时调用的方法,用于比较字符串。
Symbol.replace 一个在调用String.prototype.replace()方法时调用的方法,用于替换字符串的子串。
Symbol.search 一个在调用String.prototype.search()方法时调用的方法,用于在字符串中定位子串。
Symbol.species 用于创建派生类的构造函数
Symbol.split 一个在调用String.prototype.split()方法时调用的方法,用于在字符串中定位子串
Symbol.toPrimitive 一个返回对象原始值的方法
Symbol.toStringTag 一个在调用Object.prototype.toString()方法时使用的字符串,用于创建对象描述
Symbol.unscopables 一个定义了一些不可被with语句引用的对象属性名称的对象集合

数字模式有以下特性,根据优先级的顺序排列:

  1. 调用valueOf()方法,如果结果为原始值,则返回。
  2. 否则,调用toString方法,如果结果为原始值,则返回。
  3. 如果再无可选值,则抛出错误。

字符串模式有以下优先级排序:

  1. 调用toString()方法,如果结果为原始值,则返回。
  2. 否则,调用valueOf()方法,如果结果为原始值,则返回。
  3. 如果再无可选值,则抛出错误。

 

《深入理解ES6》之Symbol

标签:arch   元素   错误   派生类   有关   调用   地方   instance   布尔   

原文地址:http://www.cnblogs.com/jiaxiaonuo/p/7367944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!