gpt4 book ai didi

javascript - 为什么 String 的行为像 Array ? - JS

转载 作者:行者123 更新时间:2023-11-30 07:49:16 25 4
gpt4 key购买 nike

我们都知道 Strings 有点像 Array。您甚至可以对其应用一些数组方法并从中受益,如下例所示。

[].filter.call('abcdef',function(val){
return val<'e';
});

此外,

var a='xyz';

我可以使用 a[0] 访问第一个元素,或者我可以像调用 Array 一样调用 a.length

我的问题是为什么 String 表现得像 Array。如果是这样,为什么我在检查它是否是 Array 的实例时得到下面的 falseString Array-like 吗?

'a' instanceof Array

最佳答案

Array.prototype.filter 真正需要的是被迭代的变量具有 length 属性,并且该变量具有数字索引值。请参阅(部分)polyfill :

var len = this.length >>> 0,
res = new Array(len), // preallocate array
t = this, c = 0, i = -1;
if (thisArg === undefined){
while (++i !== len){
// checks to see if the key was set
if (i in this){
if (func(t[i], i, t)){
res[c++] = t[i];
}
}
}
}

字符串满足此条件 - 字符串具有 length 属性,并且在字符串上访问的数字索引解析为单个字符。

但是你可以对任意对象做同样的事情:

const obj = {
0: 'foo',
1: 'bar',
length: 2
};

const result = [].filter.call(obj, val => val.startsWith('f'));
console.log(result);

你可以说 obj 也是类数组,因为它有一个 length 属性和数字索引。大多数数组方法(如 .filter.reduce 等)都可以在类数组对象上被.call调用,即使这些对象不是实际数组。

(从技术上讲,您也可以在非类数组对象上调用数组方法,它不会做任何有用的事情——可能不会执行迭代)

关于javascript - 为什么 String 的行为像 Array ? - JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com