ES6学习——新的语法:其它Well-Known Symbols

73 篇文章 23 订阅

这篇文章过一下剩下的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";
}


*以上代码没有在任何环境下测试过
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值