为什么这在JS中无效

时间:2018-05-25 12:00:54

标签: javascript

为什么这是有效的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);

我们如何一步构建这样的阵列?

5 个答案:

答案 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;最终。相反,功能已添加到该语言。

向该语言添加功能不是免费的。必须设计,实施和测试它们。

显然,添加此语法并不值得。