嘗試在 Javascript 中宣告一個靜態陣列:
let arr = ['a':'a1','b':'b2','c':'c3'] //gives error
嘗試在 PHP 中宣告一個靜態陣列:
$arr = ['a'=>'a1','b'=>'b2','c'=>'c3'] //works
可以使用 {} 創建物件,為什么不使用具有自定義鍵的 [] 陣列?
我不是在兼容 Js 和 PHP,而是一個很大的為什么?為什么只有 Objects 而不是 Array ?
uj5u.com熱心網友回復:
您的問題是您使用的不是 {},而是 []。[] 是陣列 - 不是物件。{} 是物件 - 非常類似于 json,但可以包含所有內容 - 從數字到函式
uj5u.com熱心網友回復:
使用 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
該a/b/c屬性不露面。
一個更好的解決方案,更有可能做你真正想要的,是制作你自己的自定義“類”,如下所示:
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 語法,這可以使創建具有大量原型方法和屬性的物件變得更加容易。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359917.html
標籤:javascript 数组
上一篇:特定年/月的時區錯誤
下一篇:我想限制點后的小數位數
