为了账号安全,请及时绑定邮箱和手机立即绑定

[].slice.call(arguments) {}

[].slice.call(arguments) {}

慕斯709654 2019-04-19 16:11:45
Array.prototype.slice.call(arguments)可以等于这样写[].slice.call(arguments)大家都看过这样的写法,那么问题来了Array.prototype===[]//false然后又试了[]===Array.prototype//false最后Object.prototype可以这样写吗{}?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

对比错了,应该是Array.prototype.slice===[].slice
因为[]是Array的实例,且slice函数是从原型中继承过来的,所以可以这么写。关于最后一个问题建议好好看一下JavaScript原型方面的内容。
                            
查看完整回答
反对 回复 2019-04-19
?
慕森卡

TA贡献1806条经验 获得超8个赞

首先:
'=='是值比较
'==='是应用比较
如你所看到的slice是Array的原型对象上的方法,prototype属性指向原型对象,而[]如公子所说,是Array的实例
vara=newArray();//[]
不过如果你这个时候用a和[]比较:
a===[]//false
a==[]//false
首先,a和[]都是引用类型,所以'=='肯定是false,而用'==='是false的原因是a和[]指向不同的堆内存,所以他们栈内存中的引用地址是不同的,所以'==='比较也是false。
所以用'==='比较[]和Array.prototype也肯定是false。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信