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

image.png

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

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

这是我自己测试的截图

image.png

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

阅读 1.7k
2 个回答

对于真·数组来说,没有 @@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...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题