javascript - [].slice.call(arguments) {}
PHP中文网
PHP中文网 2017-04-10 15:07:16
[JavaScript讨论组]

Array.prototype.slice.call(arguments)可以等于这样写[].slice.call(arguments)

大家都看过这样的写法,那么问题来了
Array.prototype===[] //false
然后又试了[]===Array.prototype //false
最后Object.prototype可以这样写吗{}?

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
迷茫

对比错了,应该是 Array.prototype.slice === [].slice
因为 []Array 的实例,且 slice 函数是从原型中继承过来的,所以可以这么写。关于最后一个问题建议好好看一下 JavaScript原型 方面的内容。

巴扎黑

首先:

  • '==' 是值比较
  • '==='是应用比较

如你所看到的slice是Array的原型对象上的方法,prototype属性指向原型对象,而[]如公子所说,是Array的实例

var a = new Array(); // []

不过如果你这个时候用a[]比较:

a === [] // false
a ==  [] // false

首先,a[]都是引用类型,所以 '=='肯定是false,而用'==='是false的原因是a和[]指向不同的堆内存,所以他们栈内存中的引用地址是不同的,所以'==='比较也是false。

所以用'==='比较[]Array.prototype也肯定是false。

伊谢尔伦

之所以是false
是因为这其实是函数,typeof []得到object,自然用===肯定都是false

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号