方括号[]中的键值对是什么意思?

时间:2019-05-17 17:10:24

标签: javascript

让我们考虑以下是我的对象

var n = {"aa":"x","dd":'d'};

我在Object.assign中使用方括号,它给出以下结果。 [aa: "x", dd: "d"]。最终代码是

var n = {"aa":"x","dd":'d'};
var m = Object.assign([],n);

// result is 
[aa: "x", dd: "d"]
console.log __proto__中的

告诉它是Array,如果它是数组后面给出unexpected token error

的代码
var v = ["sss":"ddd","ccc":"ddd"]; 

什么意思?

enter image description here

5 个答案:

答案 0 :(得分:3)

您在这里拥有的是一个滥用为对象文字的数组。数组还具有例如length属性。就像这样,您可以将键分配给数组,尽管不应该这样做。

这里并不清楚您要做什么,通常是将Object.assign()与对象字面量而不是数组一起使用。它们具有自己的功能。

Object.assign({}, n);

将是一个理智的用例。

答案 1 :(得分:2)

JS中的数组是对象,因此您可以像其他任何对象一样为它们分配属性。

MDN says

  

数组是类似列表的对象

     

...

     

数组不能使用字符串作为元素索引(如在关联数组中一样),但必须使用整数。使用括号符号(或点符号)通过非整数设置或访问将不会设置或检索数组列表本身中的元素,而是会设置或访问与该数组的对象属性集合关联的变量。数组的对象属性和数组元素列表是分开的,并且数组的遍历和变异操作无法应用于这些命名属性。

Object.assign不知道数组和对象之间的区别,只是简单地将参数2+中的键分配给参数1处的对象。这种行为就不足为奇了。

const a = [];
a.foo = 42;
const b = Object.assign([], a);                  // sure, why not?
console.log(typeof a, typeof b, b.foo);          // => object object 42
console.log(Array.isArray(a), Array.isArray(b)); // => true true

var a = ["foo": "bar"]语法不起作用的原因是因为JS的扫描器提供了特殊的识别,以允许使用括号语法创建数组。没有理由认为它的行为应类似于var obj = {"foo": "bar"}语法的规范。

答案 2 :(得分:1)

Object.assign()只是从第二个参数开始循环遍历所有对象的可枚举键,并将它们添加到target对象中。

因此,Object.assign(arr, obj) 大致归结为(polyfill):

for(key in obj)
  arr[key] = obj[key]

当您要更新数组的特定索引而不更改原始数组(如react中)时,可以使用此技术

那么,这段代码

const arr = [1, 2, 3, 4]
const clone = [...arr]
clone[2] = 10;
console.log(arr, clone)

可以这样写:

const arr = [1, 2, 3, 4]
const clone = Object.assign([], arr, { [2]: 10 })
console.log(arr, clone)

答案 3 :(得分:0)

如果要将对象更改为数组,则应执行以下操作:

var n = {"aa":"x","dd":'d'};

for (let [key, value] of Object.entries(n)) {
console.log(`${key}: ${value}`);
}

Object.entries()方法返回给定对象自己的可枚举字符串键属性[key,value]对的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环也会枚举原型链中的属性)。 Object.entries()返回的数组的顺序不取决于对象的定义方式。

答案 4 :(得分:0)

  

数组是JavaScript中的{}

考虑:

let obj = {"keyOne":"keyOneValue!", "keyTwo":'keyTwoValue!'};
let array = Object.assign([], obj);

console.log('Array is', array);
console.log('Array keys are currently: ', Object.keys(array));
console.log('array.keyOne value:', array.keyOne);
console.log('array.keyTwo value:', array.keyTwo);
console.log('But Array length is', array.length);
array.push('hello');
console.log('Array push one element array.push("hello")');
console.log('Array length after push', array.length);
console.log('Array keys are now!!!', Object.keys(array));