让我们考虑以下是我的对象
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"];
什么意思?
答案 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));