首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组和Array.slice ().slice的区别

数组和Array.slice ().slice的区别
EN

Stack Overflow用户
提问于 2008-09-23 12:54:42
回答 6查看 15.2K关注 0票数 27

我正在阅读John Resig出色的Advanced javascript tutorial,但我不能完全理解以下调用之间的区别:(请注意,'arguments‘是一个内置的javascript单词,并不完全是一个数组,因此使用Array.slice而不是简单地调用arguments.slice)

代码语言:javascript
复制
>>> arguments  
[3, 1, 2, 3]  
>>> Array.slice.call( arguments )  
3,1,2,3 0=3 1=1 2=2 3=3  
>>> Array.slice.call( arguments, 1 )  
[]
>>> Array().slice.call( arguments )  
3,1,2,3 0=3 1=1 2=2 3=3  
>>> Array().slice.call( arguments, 1 )  
1,2,3 0=1 1=2 2=3  

基本上,我的误解归结为Array.slice和数组().slice之间的区别。这两者之间的区别到底是什么?为什么Array.slice.call的行为不像预期的那样?(它返回参数列表中除第一个元素之外的所有元素)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-23 14:22:51

不完全是。

注意当你调用String.substring.call("foo",1)和String().substring.call("foo",2)时会发生什么:

代码语言:javascript
复制
>>> String.substring.call("foo", 1)
"1"

>>> String().substring.call("foo", 1)
"oo"

Array.slice既没有正确引用附加到数组原型的切片函数,也没有正确引用附加到任何实例化的数组实例(如Array()或[])的切片函数。

Array.slice甚至是非空的事实是对象(/function/constructor)本身的不正确实现。尝试在IE中运行等价的代码,你会得到一个错误,Array.slice is 。

这就是为什么Array.slice不能正确运行(String.substring也不能)的原因。

证明(根据上面...just()这样的切片()的定义,人们永远不会想到下面的内容):

代码语言:javascript
复制
>>> Array.slice.call([1,2], [3,4])
3,4

现在,如果您在实例化的对象或Array原型上正确地调用slice(),您将获得预期的结果:

代码语言:javascript
复制
>>> Array.prototype.slice.call([4,5], 1)
[5]
>>> Array().slice.call([4,5], 1)
[5]

更多证据..。

代码语言:javascript
复制
>>> Array.prototype.slice == Array().slice
true
>>> Array.slice == Array().slice
false
票数 39
EN

Stack Overflow用户

发布于 2008-09-23 13:39:18

Array只是一个函数,尽管它是一个特殊的函数(用于初始化数组)。Array.slice是对数组原型中slice()函数的引用。它只能在数组对象上调用,而不能在构造函数(即数组)本身上调用。array似乎有特殊的行为,因为Array()返回一个空数组。这似乎对非内置构造函数不起作用(在那里你必须使用new)。所以

代码语言:javascript
复制
Array().slice.call

等同于

代码语言:javascript
复制
[].slice.call
票数 6
EN

Stack Overflow用户

发布于 2009-11-29 04:22:08

既然没有提供上下文参数,那么在所提供的示例中对slice.call()的任何调用是如何工作的?slice是否实现了自己的call方法,从而覆盖了JavaScript的call方法?call和apply方法将一个对象作为第一个参数,以指定要应用于调用的上下文(this)对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/120804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档