为什么在第二个示例中答案未定义?
// First
var arr = [
[1, 4, 6],
['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);
// Second
var arr = [
[1, 4, 6],
['alex']
];
arr.push([1]['Peter']);
console.log(arr);
答案 0 :(得分:2)
代码[1]['Peter']
试图从数组文字Peter
访问名为[1]
的键。它是undefined
您的代码与此等效:
var arr = [
[1, 4, 6],
['alex']
];
var tempArray = [1];
var tempValue = tempArray['Peter'] // undefined
arr.push(tempValue);
console.log(arr);
您应将其更改为:arr[1].push('Peter')
答案 1 :(得分:1)
该语法[1]['Peter']
并没有您想象的那样。您正在传递输入参数。它没有引用将其推入的数组,它是完全独立的。因此,您实际上是在告诉JavaScript首先创建一个新数组([1]
),然后尝试从其中访问一个名为“ Peter”的索引(["Peter"]
),然后将其推入下一个arr
中的免费索引。显然,新数组中不存在“ Peter”索引,这就是为什么它输出undefined
的原因。
相反,您必须像这样编写它,以便将其推送到现有数组,该数组本身位于1
的索引arr
上:
// First
var arr = [
[1, 4, 6],
['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);
// Second
var arr = [
[1, 4, 6],
['alex']
];
arr[1].push('Peter');
console.log(arr);
答案 2 :(得分:0)
问题是
arr.push([1]['Peter']);
但是包含单个元素1
的数组不具有属性Peter
。数组通常不具有非数字属性(除了Array.prototype
和Object.prototype
上的属性以外)
答案 3 :(得分:0)
您需要做的就是
var arr = [
[1, 4, 6],
['alex']
];
arr[1].push('Peter');
console.log(arr);