Array.prototype.slice.call([1,2,3,4],(1,2))
==>[3, 4]
[1,2,3,4].slice(1,2)
==>[2]
为什么这两个得到的值不一样呢?求赐教
为什么第一个Array.prototype.slice.call()会得到那样的值呢?求解答
Array.prototype.slice.call([1,2,3,4],(1,2)) 最后等价于 [1,2,3,4].slice(2);
为什么? 因为 你是 (1,2) 转换成slice的参数就是2。(1,2)是一种运算
求详解 为什么 (1,2) 转换成slice的参数就是2。(1,2)是一种运算呢?
var cc = (1,2,3,4) 最后 cc = 4
@小码农雯: 我不知道怎么叫。 但你可以测试下 var cc = (1,2,3,4);最后 cc = 4
@小码农雯: 所以 最后 slice((1,2)) -> slice(2)
@淡丶无欲: 感谢
@淡丶无欲: 这个网上是说逗号表达式 :
其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值
@小码农雯: 貌似是这名, 我只记得这是一种运算.... 毕竟半桶水货
@小码农雯: 要理解逗号运算符
@淡丶无欲: 哈哈 感谢 毕竟是指引了思路
这样就一样了
[1,2,3,4].slice((1,2))
(逃
这不就是我第二种用法吗
@小码农雯: 仔细看
我就是想知道为什么Aarray.prototype.slice.call()返回是那样的值
@长蘑菇星人: 哦 这也不是我想要的答案呢 我的目的是想弄清第一个答案
@小码农雯: 它两个是一模一样的呀。(逃
发现新世界大门。
Array.prototype.slice.call(arg):将具有length属性的对象转换成数组
对的
因为(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)
这两个一样:
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
所以这两个值才会不一样,因为调用的是两个不同的方法。
恩