Array.prototype.slice.call(arguments)可以等于这样写[].slice.call(arguments)
大家都看过这样的写法,那么问题来了
Array.prototype===[] //false
然后又试了[]===Array.prototype //false
最后Object.prototype可以这样写吗{}?
Array.prototype.slice.call(arguments)可以等于这样写[].slice.call(arguments)
大家都看过这样的写法,那么问题来了
Array.prototype===[] //false
然后又试了[]===Array.prototype //false
最后Object.prototype可以这样写吗{}?
首先:
如你所看到的slice是Array的原型对象
上的方法,prototype属性指向原型对象
,而[]如公子所说,是Array的实例
var a = new Array(); // []
不过如果你这个时候用a
和[]
比较:
a === [] // false
a == [] // false
首先,a
和[]
都是引用类型
,所以 '=='
肯定是false,而用'==='
是false的原因是a和[]指向不同的堆内存
,所以他们栈内存
中的引用地址
是不同的,所以'==='比较也是false。
所以用'==='比较[]
和Array.prototype
也肯定是false。
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答5.5k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答2.6k 阅读✓ 已解决
2 回答13.7k 阅读✓ 已解决
对比错了,应该是
Array.prototype.slice === [].slice
因为
[]
是Array
的实例,且slice
函数是从原型中继承过来的,所以可以这么写。关于最后一个问题建议好好看一下 JavaScript原型 方面的内容。