ES6学习——新的语法:其它Well-Known Symbols
来源:互联网 发布:国内旅游收入数据 编辑:程序博客网 时间:2024/06/10 13:27
这篇文章过一下剩下的well-known symbols,就不在详细写例子了。
Symbol.isConcatSpreadable:
数组的concat方法会把参数中的数组给扁平化,这个symbol就是控制是否允许这样做。
let arr1 = ['c', 'd'];['a', 'b'].concat(arr1, 'e');// ['a', 'b', 'c', 'd', 'e']let arr2 = ['c', 'd'];arr2[Symbol.isConcatSpreadable] = false;['a', 'b'].concat(arr2, 'e');// ['a', 'b', ['c','d'], 'e']
Symbol.match:
和String.prototype.match方法相关:
var O = {};O[Symbol.match] = function(){ return 42;};return ''.match(O) === 42;看规范中match方法是如何定义的:
1. Let O be RequireObjectCoercible(this value).
2. ReturnIfAbrupt(O).
3. If regexp is neither undefined nor null, then
a. Let matcher be GetMethod(regexp, @@match).
b. ReturnIfAbrupt(matcher).
c. If matcher is not undefined, then
i. Return Call(matcher, regexp, «O»).
4. Let S be ToString(O).
5. ReturnIfAbrupt(S).
6. Let rx be RegExpCreate(regexp, undefined) (see 21.2.3.2.3).
7. ReturnIfAbrupt(rx).
8. Return Invoke(rx, @@match, «S»).
这个symbol还可以控制String.prototype.startsWith,String.prototype.endsWith,String.prototype.includes方法的一些逻辑,不介绍了
Symbol.replace:
和String.prototype.replace方法相关:
var O = {};O[Symbol.replace] = function(){ return 42;};return ''.replace(O) === 42;
Symbol.split:
和String.prototype.split方法相关:
var O = {};O[Symbol.split] = function(){ return 42;};return ''.split(O) === 42;
Symbol.search:
和String.prototype.search方法相关:
var O = {};O[Symbol.search] = function(){ return 42;};return ''.search(O) === 42;
Symbol.unscopables:
和with的用法相关,在strict模式下,with已经被禁用了,所以这个symbol用处很小
var a = { foo: 1, bar: 2 };a[Symbol.unscopables] = { bar: true };with (a) { return foo === 1 && typeof bar === "undefined";}
*以上代码没有在任何环境下测试过
- ES6学习——新的语法:其它Well-Known Symbols
- ES6学习——新的语法:Symbols——Symbol.iterator
- ES6学习——新的语法:Symbols——Symbol.toPrimitive,Symbol.hasInstance,Symbol.toStringTag,Symbol.species
- ES6学习——类语法:其它
- ES6学习——新的语法:let
- ES6学习——新的语法:const
- ES6学习——新的语法:函数参数Spread
- ES6学习——新的语法:数组元素Spread
- ES6学习——新的语法:Rest
- ES6学习——新的语法:函数参数默认值
- ES6学习——新的语法:函数参数解构
- ES6学习——新的语法:Arrow Functions
- ES6学习——新的语法:Symbol概述
- ES6学习——新的语法:Symbol API介绍
- ES6学习——新的语法:for..of 循环
- ES6学习——新的语法:Template Literals
- ES6学习——新的语法:Tagged Templates
- ES6学习——新的语法:块级作用域概述
- Egret)list组件设置默认选中
- jQuery UI 实例 - 排序(Sortable)
- wsdl属性nillable和minOccurs所表示的含义
- 学习资料网址
- height、clientHeight、scrollHeight、offsetHeight区别
- ES6学习——新的语法:其它Well-Known Symbols
- 179,解决description函数输出乱码的问题
- listview实现点击出现多层菜单
- 管理者如何去管理自我
- 我国已具备推进“互联网+”发展的坚实基础
- 学习鸟哥的Linux私房菜笔记(3)——基础使用
- Egret)scroller滚动条滚动到最底
- css3-盒子模型的应用
- STM32 FOC BLDC与PMSM的区别