var str = 'hello' [].slice.call(str) 将字符串转换为数组,但具体的内部工作原理是什么啊
发布于 6 年前 作者 Arthur-lt 2881 次浏览 来自 问答

在这一块儿一直不懂

11 回复

image.png 现在我都这样用。

call让slice函数把str当做this来处理,对数组来说数组按index获取this的每一个元素来产生一个新的数组的过程同样适用于字符串,结果就是迭代字符串的每一个字符生成字符数组。
es6版的玩法:[...str]

call()第一个参数代表this指向,但数组来说数组按index获取this的每一个元素来产生一个新的数组在[].slice().call()中怎么理解

@dislido 有些地方还是不懂,能再详细点吗?

@Arthur-lt [].slice() 就是以数组为this调用slice,加个call(str)就变成了以str为this,也就是str.slice(),而slice的工作过程刚好也适用于字符串类型

const a = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
[].slice.call(a); // ['a','b','c']

实际上,slice只是用到了this的数组相关属性index和length

@dislido 比如function a(a,b,c){…} f.call(‘window’,1,2,3)相当于window.f(1,2,3) 所以这里的[].slice.call(str) 是不是相当于str.[].slice()?

我有点懂你的意思,你的意思是原本是[].slice 但call导致str.slice() 而str.slice()的工作过程有恰巧跟[].slice一致

@Arthur-lt 可以理解为str通过call把原本属于[]的slice抢了过来自己用,这个过程和str自己的slice是无关的

@dislido 好的,懂了点。谢谢^~^

回到顶部