问答

Symbol.isConcatSpreadable 设置成false或者undefined意义不一样

作者:admin 2021-04-21 我要评论

上方截图取自红宝书《JavaScript高级程序设计》,我的理解是在concat在连接数组的时候需要查看属性 Symbol.isConcatSpreadable 的值是真值还是假值。 如果为假值...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

image.png

上方截图取自红宝书《JavaScript高级程序设计》,我的理解是在concat在连接数组的时候需要查看属性Symbol.isConcatSpreadable的值是真值还是假值。

如果为假值就不打平数组,把整个数组连接到数组的最后,但是事实上并不是这样的?

这是我自己测试的截图

image.png

大佬们知道这是为什么吗?

###

对于真·数组来说,没有 @@isConcatSpreadable 这个 symbol 也是没有关系的,数组默认支持 concat spreabable,除非你手动设置一个非 undefined 的值。

参见 ES6 的 Spec:

Runtime Semantics: IsConcatSpreadable ( O )

The abstract operation IsConcatSpreadable with argument O performs the following steps:

  1. If Type(_O_) is not Object, return false.
  2. Let spreadable be Get(_O_, @@isConcatSpreadable).
  3. ReturnIfAbrupt(_spreadable_).
  4. If spreadable is not undefined, return ToBoolean(_spreadable_).
  5. Return IsArray(_O_).

参考:
ES6 spec sec-isconcatspreadable: https://262.ecma-internationa...

###

书上写的不够准确呗
https://tc39.es/ecma262/#sec-...

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Symbol.isConcatSpreadable 设置成fals

    Symbol.isConcatSpreadable 设置成fals

  • 静态页面改写成jpress模版,background

    静态页面改写成jpress模版,background

  • typescript类型问题

    typescript类型问题

  • chrome v8  js宏队列  和 微宏队列 具

    chrome v8 js宏队列 和 微宏队列 具

腾讯云代理商
海外云服务器