跳到主要内容
CNode

var str = 'hello' [].slice.call(str) 将字符串转换为数组,但具体的内部工作原理是什么啊

问答
AArthur-lt发布于 8 年前最后回复 8 年前
1138510

在这一块儿一直不懂

查看回复

回复 (11)

L
Luciferhaha#118 年前

@dislido 66

D
dislido#98 年前
引用 Arthur-lt我有点懂你的意思,你的意思是原本是[].slice 但call导致str.slice() 而str.slice()的工作过程有恰巧跟[].slice一致

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

A
Arthur-lt#88 年前

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

A
Arthur-lt#78 年前
引用 dislido实际上,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()?

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

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

D
dislido#58 年前
引用 Arthur-ltcall()第一个参数代表this指向,但 数组来说数组按index获取this的每一个元素来产生一个新的数组 在[].slice().call()中怎么理解

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

A
Arthur-lt#38 年前

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

D
dislido#28 年前

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

M
MiYogurt#18 年前

image.png 现在我都这样用。

参与回复

登录后即可参与回复。登录