浅谈[].slice.call(arguments, 1)
2024-09-06 10:03:06
今天在跟踪调试项目的代码时,发现在一个function中用到了这么一段[].slice.call(arguments, 1) 的代码。心中便起了疑惑,对于slice 和 call 的方法,倒是不怎么陌生,解析了下上面的那段代码,就是为了获取arguments 从1 开始到结尾的所有元素。只是觉得奇怪为什么不直接用 arguments.slice(1) 这样去使用呢?(PS:JS当初是啃了《JavaScript权威指南》,可是后面也没有怎么深入去用,最近转来开发HTML5 Game 时,才发现好多基础的东西都忘记的差不多了,汗!!!)。于是,就自己先做了下面的测试:
测试1 先打印下 arguments
var a = function(f){
console.log(arguments);
} a('show', [,,,]);
结果:['show', Array[4]]
测试2
var a = function(f){
console.log([].slice.call(arguments, ));
} a('show', [,,,]);
结果:[Array[4]]
测试3
var a = function(f){
console.log(arguments.slice());
} a('show', [,,,]);
结果:报错!!! **arguments.slice is not a function(...)**
此时就心中产生了疑惑了,为啥在测试一中打印出来的arguments 是个数组的东西啊,为啥会提示没有slice这个方法呢?带着疑问我去请教下了队伍里的大牛,得到了下面的答案:
测试4
(function() {
console.log(arguments instanceof Array)
})();
结果:false
arguments 并非数组,只是访问单个参数的方式与访问数组元素的方式相同。因此在使用slice方法的时候,需要用类似[].slice.call(arguments, 1) 的这种方式去调用,至此,关于这条语句引发的思考也就此结束了
.
最新文章
- Minimum Depth of Binary Tree [LeetCode]
- git的合并与推送
- Android ListView自定义Adapter使用误区
- 禁用缓存的过滤器Filter
- (转)汇编bne的问题
- c#SocketIO4NetClient访问node js
- POJ2155:Matrix(二维树状数组,经典)
- 清理我的 Mac
- Python3+迭代器与生成器
- c语言基础学习09_关于复合类型的复习
- php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用
- Python爬虫入门教程 51-100 Python3爬虫通过m3u8文件下载ts视频-Python爬虫6操作
- Spring Boot 系列(九)数据层-集成Spring-data-jpa
- Js -----后台json数据,前端生成下载text文件
- 【学习博客】Python学习初体验
- Python解决乱码问题
- Feign请求中报错:Request header is too large 的解决方案。
- JUC集合之 ConcurrentLinkedQueue
- TP 等框架在配置虚拟主机伪静态注意事项
- WinForm界面开发之 启动界面
热门文章
- 微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
- [Linux]线程分离状态的理解
- Less(4)
- Leetcode103_Binary-tree-zigzag-level-order-traversal
- Java多态的总结
- Django restful framework中自动生成API文档
- IT兄弟连 Java语法教程 流程控制语句 控制循环结构3
- [LeetCode#184]Department Highest Salary
- 英语阅读——A meaningful life
- C++ 运行时类别识别