Symbol.hasInstance

// Symbol.hasInstance
class MyClass {[Symbol.hasInstance] (foo) {return foo instanceof Array;}
}
[1, 2, 3] instanceof new MyClass() // true// symbol.hasInstance:会在[1, 2, 3]  instanceof 时 自动调用 [Symbol.hasInstance] (foo) 方法...
// 等价于. ([1,2,3]) => { return [1,2,3] instanceof Array}

Symbol.isConcatSpreadable

class A1 extends Array {construcor(args) {super(args);this[Symbol.isConcatSpreadable] = true;}
}
class A2 extends Array {constructor(args) {super(args);this[Symbol.isConcatSpreadable] = false;}
}
let a1 = new A1();
a1[0] = 3;
a1[1] = 4;
let a2 = new A2();
a2[0] = 5;
a2[1] = 6;
[1, 2].concat(a1).concat(a2)
// [1, 2, 3, 4, [5, 6]]
// Symbol.isConcatSpreadable:表示对象使用Array.prototype.concat()时,是否可以展开

Symbol.species

// Symbol.species
// 使用格式
class MyArray extends Array {// 覆盖父类 Array 的构造函数static get [Symbol.species] () { return Array; }
}// 实例.
class MyArray extends Array {static get [Symbol.species] () { return Array; }
}
var a = new MyArray(1,2,3);
var mapped = a.map (x => x * x);mapped instanceof MyArray // false
mapped instanceof Array // true// 注:在static get[Symbol.species] () 中 将构造函数改为了 返回Array类,, 故使用instance MyArray 返回 false.

Symbol.match

// Symbol.match
class MyMatcher {[Symbol.match] (string) {return 'hello world'.indexOf(string);}
}
'e'.match(new MyMatcher))  // 1
// 注:等同于 [Symbol.match] ('e') { return 'hello world'.indexOf('e')}

Symbol.replace

// Symbol.replace
const x= {};
x[Symbol.replace] = (...s) => console.log(s);
'Hello'.replace(x, 'World')
// 注:在执行'Hello'.replace操作时,实际上执行:(['Hello','World']) => console.log ('["Hello","World"]');
// Symbol.replace会在执行String.prototype.replace方法时调用函数.


Symbol.search

// Symbol.search
class MySearch {constructor (value) {this.value = value;}[Symbol.search] (string) {return string.indexOf(this.value);}
}
'foobar'.search(new MySearch('foo')) // 0
// 注: [Symbol.search] (string),在执行String.prototype.search方法时调用.
// 本例相当于执行: ('foobar') { return 'foobar'.indexOf('foo')}
}

Symbol.split

// Symbol.split
class MySplitter {constructor (value) {this.value = value;}[Symbol.split] (string) {var index = string.indexOf(this.value);if (index = -1){return string;}return [string.substr(0, index),string.substr(index + this.value.length)];}
}
'foobar'.split(new MySplitter('foo'))   // ['', 'bar']
'foobar'.split(new MySplitter('bar'))   // ['foo', '']
'foobar'.split(new MySplitter('baz'))   // ['foobar']
// 注: [Symbol.split]](string) 在执行String.prototypr.string方法时触发
// 本例改写了split方法,将string分为2部分,一部分(未匹配的)不变,另一部分(匹配到的)置为空, 若string中无匹配值,则完整返回...

Symbol.iterator

// Symbol.iterator
class Collection {*[Symbol.iterator] () {let i = 0;while (this[i] !== undefined) {yield this[i];++i;}}
}
let myCollection = new Collection();
myCollection[0] = 1;
myCollection[1] = 2;
for (let value of myCollection) {console.log (value);
}
// 1
// 2
// 注:在执行for ... of 循环时 触发Symbol.iterator方法
// yield 在for循环时会保存当前的元素...

Symbol.toPrimitive

// Symbol.toPrimitive
let obj = {[Symbol.toPrimitive] (hint) {swtich (hint) {case 'number':return 123;case 'string':return 'str';case 'default':return ‘default';default:throw new Error ();}}
}
2 * obj ;  // 246
3 + obj ;   // '3default'
obj == 'default'   // true
String(obj)    // 'str'
// 注:在对象被转为原始类型的值时,会调用这个方法

Symbol.toStringTag

// Symbol.toStringTag
class Collection {get [Symbol.toStringTag] () {return 'xxx',}
}
var x = new Collection();
Object.prototype.toString.call(x);     // "[object xxx]"
// 注:当执行Object.prototype.toString方法时,触发Symbol.toStringTag

Symbol.unscopables

// Symbol.unscopables
// 无unscopables
class MyClass {foo() { return 1;}
}
var foo = function () { return 2;};
with (MyClass.prototype) {foo();    // 1
}
// 有unscopables
class MyClass {foo() { return 1; }get [Symbol.unscopables] () {return { foo: true};}
}
var foo = function () { return 2;};
with (MyClass.prototype) {foo();     // 2
}
// 注:unscopables属性指定了使用with关键字时哪些属性会被with环境排除.
// 在本例中指定了foo属性被排除....

参考《ES6标准入门》 P194~P203

es6 --- 内置的Symbol值相关推荐

  1. es6 内置对象扩展rest, Arry 扩展方法Array.from(),find(), findIndex(),includes()

    1.es6内置对象扩展rest实参 2.  Arry 扩展方法    (1)构造函数方法:Array.from()   (2) find()   (3) findIndex()   (4)includ ...

  2. Python内置函数——最值与求和

    max().min().sum()这三个内置函数分别用于计算列表.元组或其他包含有限个元素的可迭代对象中所有元素最大值.最小值以及所有元素之和.sun()默认(可以通过start参数来改变)支持包含数 ...

  3. python内置函数布尔值bool用法详解

    python内置函数bool可将给定参数转换为bool类型,bool函数的返回值要么是True,要么是False,在做转换时,0, None,空字符串,空列表,空元组,空集合,空字典都会被转换为Fal ...

  4. ES6——ES6内置对象

    文章目录 前言 一.array 的扩展方法. 1.  展开语法 2.  Array.from()方法 3.  array.find() 方法 4. array.findindex()方法 5. arr ...

  5. es6 Symbol 的内置属性

    Symbol 的内置属性 除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法. Symbol.hasInstance 对象的Symbo ...

  6. 好好学python · 内置函数(range(),zip(),sorted(),map(),reduce(),filter())

    内置函数 range函数 zip() 函数 其它内置函数 数据类型转换相关内置函数 变量相关函数 数学相关函数 进制相关函数 高阶函数 sorted(iterable,[reverse,key]) m ...

  7. WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord

    WebGL着色器内置变量 WebGL中文教程网 本文是WebGL教程(电子书)的2.7节内容 着色器语言在GPU的着色器单元执行,javascript语言.C语言在CPU上执行,任何一种语言的语法规则 ...

  8. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(第五章:基本引用类型,原始值包装类型,单例内置对象)

    第五章:基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建. 5.1 Date 这里不对Date进行详细深入,仅基于书 ...

  9. ES6新增语法与内置对象扩展

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.什么是ES6 ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项 ...

最新文章

  1. 版电力系统故障录波_电力系统中的变电运维技术匹配专业中的应用
  2. Redis中Value使用hash类型的效率是普通String的两倍
  3. Halcon 标定与准确测量
  4. php5.2.3 zend3,windows 2008 R2 下 IIS7.5+PHP5.2.17+Mysql5.5.16+Zend3.3.3
  5. 【二分图判定】hdu3478 Catch
  6. 生命银行怎么样_减脂就像是从“脂肪银行”中提款,想要成功,你要做到这两点...
  7. 遍历一个文件夹所有文件
  8. struts 标签导入
  9. js打开新窗口的方法
  10. 车机鸿蒙系统 车型,华为鸿蒙车机系统提前曝光!首发车型是它?
  11. 【WPF】命令 --《深入浅出WPF》
  12. 大众给于微软Win8平板过于热情的期待,多属盲目行为
  13. 如何打印身份证的正反面
  14. indesign怎么拼图_用R来拼图和排版,告别AI和PS(二):调节宽度和高度
  15. 39. 网络管理之IP配置,查看当前IP和网络设备,网络配置文件(ifcfg-网卡)详解,配置静态IP,配置动态IP,临时设置,/etc/sysconfig/network-scripts/ifcfg
  16. iOS平台游戏安全再议之存档修改与防御
  17. 工作日志(部门管理)
  18. 王者服务器维护s24,王者荣耀:体验更新S24数据,征召模式痛点解决,不会再失手了...
  19. 深富策略核心资产崩了
  20. matlab曲线导入cad,MATLAB导入CAD数据.docx

热门文章

  1. c html转为datatable,C#中DataTable导出为HTML格式的方法
  2. java多线程意义_Java多线程学习之多线程的概念及意义
  3. python生成csv文件带水印_Python从CSV文件导入数据和生成简单图表
  4. 月入10万和月入5千的人关键区别是什么???
  5. 算法入门经典 第三章
  6. 【物理/数学】—— 概念的理解 moment、momentum
  7. typedef struct 用法
  8. SQL Server 数据库的维护(四)__游标(cursor)
  9. 配置云服务器 FTP 服务
  10. centos 安装软件