为什么这是有效的JS:
const a = ['b', 'c'];
a.d = 'e';
a.x = { y: 'z' };
console.log(a); // ['b', 'c', d: 'e', x: { y: 'z' }]
但这不是:
const a = ['b', 'c', d: 'e', x: { y: 'z' }];
console.log(a);
我们如何一步构建这样的阵列?
答案 0 :(得分:2)
您正在混合数组和对象文字。
['a', 'b']
是一个数组文字,创建一个长度为2的数组,其中包含两个字符串。
{a: 1, b: 2}
是一个对象文字,在两个键上创建一个具有两个值的对象。
您的第一个示例将键下的aditional值添加到数组中。这是可能的,因为每个数组也是一个对象。这可以(afaik)不通过文字来完成。
答案 1 :(得分:1)
JavaScript Array
实际上是一个“类”,因此数组的实例实际上是一个对象。这也是typeof [1 , 2 ,3]
所说的。
您可以使用JavaScript对象执行一般操作,例如添加属性或覆盖现有属性,例如使用您想要的任意覆盖长度或在其上添加自定义方法。
var arr = [ 1, 2, 3, 4 ];
arr.length = 100;
arr.thirditem = function () {
return this[3];
}.bind(arr);
console.log(arr.length);
console.log(arr.thirditem());
我们需要注意阅读MDN:
JavaScript Array对象是一个用于构造数组的全局对象;这是高级的,类似列表的对象。 [...]
语法
[element0, element1, ..., elementN] new Array(element0, element1[, ...[, elementN]]) new Array(arrayLength)
数组的初始化规则需要遵守上面提到的数组的JavaScript语法规则,因此它必须严格为[ "comma", "separated", "values" ]
格式或使用new Array("comma", "separated", "values")
格式(或new Array(length)
格式你只需要一个N值数组)。
答案 2 :(得分:0)
数组元素不是数组属性。通过在方括号之间列出零个或多个元素来声明一个数组,并使用点表示法声明其属性。 这不能在"一步"正如你所问,因为它们本质上是不同的东西。
答案 3 :(得分:0)
您可以将对象作为容器,并使用索引添加所有数组值。对于迭代数组值,您可以将这些值分配给具有Object.assign
const a = { 0: 'b', 1: 'c', d: 'e', x: { y: 'z' } };
console.log(a);
console.log(Object.assign([], a)); // take the array values
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 4 :(得分:0)
您的建议是JavaScript可以允许以下语法 -
var arr = [some: "someVal", other: "otherVal"];
等于
var arr = [];
arr.some = "someVal";
arr.other = "otherVal";
这样的阵列会有大量真实世界的用例吗?
一种语言没有一套无限的功能,其中一些功能被剔除了#34;最终。相反,功能已添加到该语言。
向该语言添加功能不是免费的。必须设计,实施和测试它们。
显然,添加此语法并不值得。