首页 新闻 会员 周边

array.slice()

0
悬赏园豆:5 [已解决问题] 解决于 2017-02-21 11:36

Array.prototype.slice.call([1,2,3,4],(1,2))
==>[3, 4]


[1,2,3,4].slice(1,2)
==>[2]

 

为什么这两个得到的值不一样呢?求赐教

为什么第一个Array.prototype.slice.call()会得到那样的值呢?求解答

改吧的主页 改吧 | 初学一级 | 园豆:104
提问于:2017-02-21 10:57
< >
分享
最佳答案
0

Array.prototype.slice.call([1,2,3,4],(1,2))  最后等价于  [1,2,3,4].slice(2);

为什么? 因为 你是 (1,2) 转换成slice的参数就是2。(1,2)是一种运算

 

收获园豆:5
淡丶无欲 | 初学一级 |园豆:87 | 2017-02-21 11:07

求详解  为什么 (1,2) 转换成slice的参数就是2。(1,2)是一种运算呢?

改吧 | 园豆:104 (初学一级) | 2017-02-21 11:08

var cc = (1,2,3,4) 最后 cc = 4

 

淡丶无欲 | 园豆:87 (初学一级) | 2017-02-21 11:08

@小码农雯: 我不知道怎么叫。  但你可以测试下  var cc = (1,2,3,4);最后 cc = 4

淡丶无欲 | 园豆:87 (初学一级) | 2017-02-21 11:08

@小码农雯: 所以 最后 slice((1,2)) -> slice(2)

淡丶无欲 | 园豆:87 (初学一级) | 2017-02-21 11:11

@淡丶无欲: 感谢

改吧 | 园豆:104 (初学一级) | 2017-02-21 11:11

@淡丶无欲: 这个网上是说逗号表达式 :

其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值

改吧 | 园豆:104 (初学一级) | 2017-02-21 11:11

@小码农雯: 貌似是这名, 我只记得这是一种运算....  毕竟半桶水货

淡丶无欲 | 园豆:87 (初学一级) | 2017-02-21 11:13

@小码农雯: 要理解逗号运算符

holine | 园豆:200 (初学一级) | 2017-02-21 11:14

@淡丶无欲: 哈哈 感谢 毕竟是指引了思路

改吧 | 园豆:104 (初学一级) | 2017-02-21 11:16
其他回答(3)
0

这样就一样了

[1,2,3,4].slice((1,2))

(逃


长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-21 11:00

这不就是我第二种用法吗  

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2017-02-21 11:00

@小码农雯: 仔细看


支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-21 11:01

我就是想知道为什么Aarray.prototype.slice.call()返回是那样的值

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2017-02-21 11:01

@长蘑菇星人: 哦 这也不是我想要的答案呢 我的目的是想弄清第一个答案

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2017-02-21 11:02

@小码农雯: 它两个是一模一样的呀。(逃


支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-21 11:02

发现新世界大门。


支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-21 11:05
0

Array.prototype.slice.call(arg):将具有length属性的对象转换成数组

改吧 | 园豆:104 (初学一级) | 2017-02-21 11:05

对的

支持(0) 反对(0) 代码飞了 | 园豆:470 (菜鸟二级) | 2017-02-21 11:08

因为(1,2)是一个参数,call(this,args)

var a=(1,2)是逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,所以args是1

其表达就是Array.prototype.slice.call([1,2,3,4],2)也就是等同于[1,2,3,4].slice(2)==>[3,4]

想要得到[1,2,3,4].slice(1,2)一样的效果,那就是Array.prototype.slice.call([1,2,3,4],1,2)

 

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2017-02-21 11:15
0

这两个一样:

Array.prototype.slice.call([1,2,3,4],1,2)
[2]
[1,2,3,4].slice(1,2)
[2]

这两个一样:

Array.prototype.slice.call([1,2,3,4],(1,2))
[3, 4]
[1,2,3,4].slice((1,2))
[3, 4]

 

所以,你只是把方法用错了,api不一样。

slice(1, 2) 这是是两个参数 arguments.length = 2

slice ((1,2)) 这是一个参数 arguments.length = 1

 

所以这两个值才会不一样,因为调用的是两个不同的方法。

nil | 园豆:879 (小虾三级) | 2017-02-21 11:17

恩 

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2017-02-21 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册