es6 --- 内置的Symbol值
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值相关推荐
- es6 内置对象扩展rest, Arry 扩展方法Array.from(),find(), findIndex(),includes()
1.es6内置对象扩展rest实参 2. Arry 扩展方法 (1)构造函数方法:Array.from() (2) find() (3) findIndex() (4)includ ...
- Python内置函数——最值与求和
max().min().sum()这三个内置函数分别用于计算列表.元组或其他包含有限个元素的可迭代对象中所有元素最大值.最小值以及所有元素之和.sun()默认(可以通过start参数来改变)支持包含数 ...
- python内置函数布尔值bool用法详解
python内置函数bool可将给定参数转换为bool类型,bool函数的返回值要么是True,要么是False,在做转换时,0, None,空字符串,空列表,空元组,空集合,空字典都会被转换为Fal ...
- ES6——ES6内置对象
文章目录 前言 一.array 的扩展方法. 1. 展开语法 2. Array.from()方法 3. array.find() 方法 4. array.findindex()方法 5. arr ...
- es6 Symbol 的内置属性
Symbol 的内置属性 除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法. Symbol.hasInstance 对象的Symbo ...
- 好好学python · 内置函数(range(),zip(),sorted(),map(),reduce(),filter())
内置函数 range函数 zip() 函数 其它内置函数 数据类型转换相关内置函数 变量相关函数 数学相关函数 进制相关函数 高阶函数 sorted(iterable,[reverse,key]) m ...
- WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
WebGL着色器内置变量 WebGL中文教程网 本文是WebGL教程(电子书)的2.7节内容 着色器语言在GPU的着色器单元执行,javascript语言.C语言在CPU上执行,任何一种语言的语法规则 ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(第五章:基本引用类型,原始值包装类型,单例内置对象)
第五章:基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建. 5.1 Date 这里不对Date进行详细深入,仅基于书 ...
- ES6新增语法与内置对象扩展
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.什么是ES6 ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项 ...
最新文章
- 版电力系统故障录波_电力系统中的变电运维技术匹配专业中的应用
- Redis中Value使用hash类型的效率是普通String的两倍
- Halcon 标定与准确测量
- php5.2.3 zend3,windows 2008 R2 下 IIS7.5+PHP5.2.17+Mysql5.5.16+Zend3.3.3
- 【二分图判定】hdu3478 Catch
- 生命银行怎么样_减脂就像是从“脂肪银行”中提款,想要成功,你要做到这两点...
- 遍历一个文件夹所有文件
- struts 标签导入
- js打开新窗口的方法
- 车机鸿蒙系统 车型,华为鸿蒙车机系统提前曝光!首发车型是它?
- 【WPF】命令 --《深入浅出WPF》
- 大众给于微软Win8平板过于热情的期待,多属盲目行为
- 如何打印身份证的正反面
- indesign怎么拼图_用R来拼图和排版,告别AI和PS(二):调节宽度和高度
- 39. 网络管理之IP配置,查看当前IP和网络设备,网络配置文件(ifcfg-网卡)详解,配置静态IP,配置动态IP,临时设置,/etc/sysconfig/network-scripts/ifcfg
- iOS平台游戏安全再议之存档修改与防御
- 工作日志(部门管理)
- 王者服务器维护s24,王者荣耀:体验更新S24数据,征召模式痛点解决,不会再失手了...
- 深富策略核心资产崩了
- matlab曲线导入cad,MATLAB导入CAD数据.docx
热门文章
- c html转为datatable,C#中DataTable导出为HTML格式的方法
- java多线程意义_Java多线程学习之多线程的概念及意义
- python生成csv文件带水印_Python从CSV文件导入数据和生成简单图表
- 月入10万和月入5千的人关键区别是什么???
- 算法入门经典 第三章
- 【物理/数学】—— 概念的理解 moment、momentum
- typedef struct 用法
- SQL Server 数据库的维护(四)__游标(cursor)
- 配置云服务器 FTP 服务
- centos 安装软件