Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以分配数组';值键';有价值吗?_Javascript - Fatal编程技术网

Javascript 可以分配数组';值键';有价值吗?

Javascript 可以分配数组';值键';有价值吗?,javascript,Javascript,我有一个这样的数组 var list =['lemon', 'apple']; list['yuck'] = 'durian'; list.forEach(function(i){ console.log(i); }); 输出是 lemon apple 榴莲在哪里 这个问题不是关于如何正确使用数组,我只是觉得我们能够这样做很奇怪,这里到底发生了什么?,这是由正整数标识的属性'yuck'是一个无法转换为整数的字符串 如果确实要迭代所有值,可以执行以下操作: for (var key

我有一个这样的数组

var list =['lemon', 'apple'];
list['yuck'] = 'durian';

list.forEach(function(i){
    console.log(i);
});
输出是

lemon
apple
榴莲在哪里

这个问题不是关于如何正确使用数组,我只是觉得我们能够这样做很奇怪,这里到底发生了什么?

,这是由正整数标识的属性<代码>'yuck'是一个无法转换为整数的字符串

如果确实要迭代所有值,可以执行以下操作:

for (var key in list) {
  console.log(list[key]);
}

但它破坏了所有阵列的优化。您可能应该使用或对象来代替。

因为这不是向javascript数组添加值的方式。您必须使用方法
Array.prototype.push()


list['yack']='durian'

这里的语法是将文本
durain
添加到属性
yack

这里您正在添加键值。这是为对象指定值的方式

上面的一行将引发异常,因为您无法向数组中添加键值。所以你的数组永远不会被修改

这个呢

list.forEach(函数(i){
控制台日志(i);
});

您正在循环初始数组。因此,打印相同的值

另一方面,您可以使用。
list.push('durian')


list[2]=“榴莲”

您正在向数组添加属性
真恶心
。不添加新索引
forEach
仅迭代数组索引。索引只能是大于零的整数。还有一些其他规则,比如最大尺寸以及它们与
length
属性之间的关系让它工作。可惜链接QA中的好答案不被接受。这是一个完全正确的问题,不需要向下看,我会说它们相似但不相同。此问题更为简洁,应该取代我签出的旧问题集,目前还不完全支持。如果您的目标浏览器不支持此问题,请使用简单对象而不是数组。或者使用push来添加元素。你能详细解释一下为什么它会破坏优化吗?当数组以预期的方式使用时,在moderne JS引擎中,数组操作非常快。您可以在这里看到对这个问题的介绍:(示例不太简单,只是创建一个数组而不是一个数组)
var list = ['lemon', 'apple'];
list.push('durian');

list.forEach(function(i){
    console.log(i);
});