【问题标题】:new Array(5).toString() returning four commasnew Array(5).toString() 返回四个逗号
【发布时间】:2019-11-10 17:30:56
【问题描述】:
  • 为了理解下面的代码 sn-p 我查看了这个链接。
  • 但我仍然无法弄清楚为什么它在控制台中打印四个逗号。
  • 因为我正在创建包含五个项目的数组
  • 你能告诉我它是如何工作的吗?
new Array(5).toString();
",,,,"

【问题讨论】:

  • 元素之间的空间。
  • 就像 a,b,c,d,e 如果你看到这里有 5 个元素但只有 4 个逗号
  • @NinaScholz 嘿,但是总共有五个数组,所以应该有五个逗号吧?
  • @zizi 请参考下面我的回答。想想你如何声明一个项目数组; 两个项目之间只有逗号,最后一个项目之后没有额外的逗号。
  • @slai——这篇文章有点误导。 “尾随逗号”总是被允许的,但早期的 IE 有一个错误,将它们视为语法错误。此外,IE 也没有正确处理省略,因此[,,] 创建了一个长度为 3 的数组,而它本应为 2。ECMA-262 或多或少地被修改以适应 IE 的错误行为。所以[0,1,] 总是应该创建一个长度为 2 的数组,不是因为尾随逗号被忽略,而是因为最后的省略不会增加长度。但现在它在 EMCA-262 中是明确的。 [1,2,,] 创建一个长度为 3 的数组(它总是应该有)。 :-)

标签: javascript arrays string methods


【解决方案1】:

想象一下每个数组索引中的值会是什么样子。

[1,2,3,4,5].join(); // Returns 1,2,3,4,5

现在,如果您删除数字,您只剩下中间的逗号。

new Array(5).join(); // Returns ,,,, because the values are blank.

【讨论】:

  • 当我搜索时,我找不到。我试过并发布了。你能告诉我如何删除负面标记:(
【解决方案2】:

toString() 方法迭代将Array 中的所有元素推入字符串并在它们之间推入,

当您使用 5 个元素定义空数组时,当您应用 toString 时,它将其转换为五个“空”字符串,它们之间有 4 个“,”

【讨论】:

  • 它并没有完全迭代元素,因为(在 OP 的情况下)没有任何元素,它从 0 迭代到 length。 ;-)
  • 当我搜索时我找不到。我试过并发布了。你能告诉我如何删除负面标记:(
【解决方案3】:

如您所见,someArray.toString() 将返回数组中的内容,但没有 []

console.log([1,2,3,4,5])
console.log([1,2,3,4,5].toString())

所以,如果你在数组元素中有注释,它将返回空字符串并且只打印逗号。 (Array(5)[,,,,,] 相同)

console.log([,,,,])
console.log([,,,,].toString())

Array(5) 将返回一个仅具有属性length: 5 的数组。这将使它成为元素undefined

如果你想把它做成别的东西,那么undefined你可以使用.fill

console.log(Array(5))
console.log(Array(5).fill(""))
console.log(Array(5).fill("anything"))

【讨论】:

  • 嘿,但是为什么你的第二个代码 sn-p 返回 undefined :(
  • @zizi 因为即使console.log(...) 将括号中的内容输出到控制台,函数console.log 本身也不会返回值。第一个代码 sn -p 做同样的事情。
  • 现在你将不得不解释为什么[,,,,,] 只生成一个长度为 5 而不是 6 的数组。;-)
  • 当我搜索时我找不到。我试过并发布了。你能告诉我如何删除负面标记:(
【解决方案4】:

new Array(5)返回一个 sparse array 或一个内部有 5 个空格的数组。唯一要做的就是将数组对象的 length 属性设置为指定的参数(在本例中为 5)。

console.log(new Array(5)) // browser console --> [empty × 5]

因此,如果您尝试打印其内容,自然会显示您有 5 个空格,由 , 分隔

console.log(new Array(5).toString()) // ,,,, <-- 5 empty ',' separated elements

【讨论】:

  • 当我搜索时,我找不到。我试过并发布了。你能告诉我如何删除负面标记:(
  • "负分" ?你的意思是对你的问题投反对票-1
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2021-10-06
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多