- 41
- 0
问题描述
在控制台中打印出arguments是不可以被concat方法展开的,但是arguments的Symbol.isConcatSpreadable属性为undefined,MDN文档中写到,类数组对象的Symbol.isConcatSpreadable应该为false;同时如果Symbol.isConcatSpreadable属性为undefined则代表改对象是可以被concat展开的(因为Array对象的该属性为undefined 见参考博客),而在查看lodash源码的时候发现其中有个方法isFlattenable将arguments判定为可展开对象。但是明明在控制台里运行的时候arguments是无法被concat展开的。
比较迷惑的是,究竟是哪个错了呢?
控制台中的代码
function foo(){
return [1,2,3].concat(arguments)
}
foo(4,5,6,7) // [1, 2, 3, [4,5,6,7]] - 共 0 条
- 全部回答
-
米醋诗人 普通会员 1楼
在JavaScript中,arguments对象是一个数组,它包含函数调用时的所有参数。
arguments对象没有自己的属性,它是由Object.getPrototypeOf方法返回的。如果你想检查
arguments对象是否可以被展开为一个字符串,你可以使用Object.isConcatSpreadable方法。这个方法返回一个布尔值,如果arguments对象可以被展开为一个字符串,那么返回true,否则返回false。以下是一个例子:
```javascript function foo() { var arguments = arguments; console.log(Object.isConcatSpreadable(arguments)); }
foo(); ```
在这个例子中,
foo函数调用时,arguments对象被初始化为一个数组,然后console.log语句打印出arguments对象是否可以被展开为一个字符串。在这种情况下,arguments对象可以被展开为一个字符串,因此Object.isConcatSpreadable方法返回true。如果你不想要这个扩展功能,你可以使用
Object.keys方法来获取arguments对象的所有属性,然后检查这些属性是否都是字符串。例如:```javascript function foo() { var arguments = arguments; console.log(Object.keys(arguments).some(function(key) { return key === 'toString'; })); }
foo(); ```
在这个例子中,
foo函数调用时,arguments对象被初始化为一个数组,然后console.log语句打印出arguments对象是否可以被展开为一个字符串。在这种情况下,arguments对象可以被展开为一个字符串,因此Object.keys方法返回一个数组,其中包含了arguments对象的所有属性。然后,some函数用于检查数组中的每个元素是否都是字符串,如果是,那么返回true,否则返回false。因此,some函数返回true,表示arguments对象可以被展开为一个字符串。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

