为什么我们不能像PHP那样在一行中用javascript中的自定义键创建静态数组



尝试在Javascript中声明静态数组:

let arr = ['a':'a1','b':'b2','c':'c3'] //gives error

尝试在PHP中声明静态数组:

$arr = ['a'=>'a1','b'=>'b2','c'=>'c3'] //works

可以使用{}创建对象,为什么不使用具有自定义键的[]数组?

我不兼容Js和PHP,但只是一个很大的为什么?为什么只有对象而不是数组?

使用JavaScript中内置的Array类型,我相信这是最接近的,使用Object.assign将命名属性从对象克隆到Array对象。但这是否真的会像你认为的那样,是非常值得怀疑的

const a = Object.assign([1,2,3], {a:4, b:5, c:6});

可以这样做是因为数组是一个对象,只是一种特殊类型,具有特殊的Array.prototype函数来处理其数字键控成员。

但是,如果您认为可以使用.map.forEach之类的东西来循环(非数字(命名的属性,那就行不通了。这些是仅适用于数字键控数组项的特殊情况。尝试使用上面的数组执行此操作:

a.forEach(x=> console.log(x));
// output:
// => 1
// => 2
// => 3

CCD_ 5属性不显示。

一个更好的解决方案,更可能做你真正想做的事情,是制作你自己的自定义";类,";像这样的东西:

function NamedArray(init) {
Object.assign(this, init);
}
NamedArray.prototype.forEach = function(callback) {
const keys = Object.entries(this);
keys.forEach(([key, value],array)=> callback(value, key, array));
}
const arr = new NamedArray({a:1,b:2,c:3});
arr.forEach((value,key)=> {
console.log(key, value);
})

您可以使用此模式创建所需的所有类方法。

注意:创建这些类还有ES6语法,这可以使创建具有大量原型方法和属性的对象变得更加容易。

您的问题是您使用的不是{},而是[]。[]是数组,而不是对象。{}是对象-非常类似json,但可以包含从数字到函数的所有内容

最新更新