在JavaScript中,字符串是类似数组的对象吗?

7

JavaScript中的字符串和数组一样有一个长度属性,但是它们没有像forEachreduce这样的方法。

这是否意味着字符串是类似于数组的对象?


6
不,JS中的字符串是原始值。为了使用字符串方法,会创建一个临时对象。 - Teemu
1
请注意,String.prototype 中也有一些方法... - Teemu
3个回答

13
术语“类数组”通常指具有整数值.length属性和相应数量的元素存储在整数键属性中的对象,以便我们可以像访问数组一样通过索引访问它们。字符串满足这个要求。
不,字符串并没有所有数组所具有的方法。它们没有继承自Array.prototype,它们不是真正的数组 - 它们只是类似于数组。但是,您可以通过….split('')Array.from(…)将字符串轻松转换为数组。

嗯,现在我有点困惑了。你说字符串类似于数组,但@Teemu说它们不是(请查看第一条评论)。 - user1941537
普通字符串不是对象(这是 Teemu 说的),但它们仍然类似于数组。当您在原始值上访问属性时,它会被隐式地强制转换为一个临时对象。 - Bergi

2
根据文档,这些函数不存在(文档)。
但是你可以将函数添加到String原型中。
// forEach function
String.prototype.forEach = function (f) {
  for (i=0; i < this.length; ++i) {
    f(this[i]);
  }
}


// reduce function
String.prototype.reduce = function (f, start) {
  result = (start == undefined) ? null : start
  for(i = 0; i < this.length; ++i) {
    result += f(this[i])
  }
  return result
}

1
在JavaScript中,字符串的字母以索引方式存储,无论是原始类型还是对象类型的字符串都存储在字符串引用名称的索引值中。那么一个问题就出现了,为什么我们要将字符串转换为数组呢?如果我们想要对字母进行排序,我们需要使用JavaScript数组中的sort方法。字符串中不包含sort方法。字符串包含一些属性,如length,但它不包含数组包含的所有方法。如果我们在字符串中应用sort方法,它会给出一个错误,即"stringName.sort不是一个函数"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接