簡體   English   中英

什么樣的JS對象是[foo:'bar']

[英]What kind of JS object is [ foo: 'bar']

如果我創建一個空白數組並分配一個值:

 let a = [] a['foo'] = 'bar' console.log(a) // [ foo: 'bar'] - not in SO console though console.log(a[0]) // undefined console.log(a.length) // 0 console.log(a instanceof Array) // true for (let i of a) {} // Doesn't loop but doesn't throw errors like {} for (let o in a) { console.log(o) // foo } 

這是什么? 長度為0的數組? 這是什么樣的JS東西? 也會打印到節點控制台,但SO片段控制台無法識別(運行它並同時查看Web檢查器控制台)

請注意,我不需要用{}初始化的答案。 那不是問題的重點。

javascript中的所有內容都是對象,數組也是。 Array基本上是一個從零開始的鍵對象,它是可迭代的,因此,在將帶有字符串鍵的值添加到Array時,您只是在向該對象添加鍵。

實際上,您可以創建自己的可迭代對象,就像Array一樣,並將其與for...of循環一起使用。 檢查一下: https : //jsfiddle.net/gumh6bsy/

如果運行let a = [foo:'two',bar:'one'],則會出現錯誤。 那么我的代碼中的循環如何獲取該結果並將其打印到控制台。 循環創建后,它似乎可以很好地管理。 我以為起初它只是將其轉換為對象,但它是一個Array實例。 –網​​絡袋熊

let a = [ foo: 'two', bar: 'one' ]引發錯誤,因為方括號是用於初始化數組的語法,因此被JavaScript引擎驗證,並且不允許在初始化中定義鍵。 同時,鍵分配語法( a['foo'] = 'two' )對於數組和對象都沒有任何不同。 實際上,這只是將屬性分配給對象的語法。 這里的主要結論是,在javascript array中,是Array類型的對象 實際定義數組與定義let a = { 0: 'one', 1: 'two' }幾乎相同,不同之處在於Array(作為一種類型)在具有特殊初始化語法的javascript中被識別為“特殊”類型( let a = [ 'one', 'two', 'three' ]獲得基於零的數字鍵,並且它是可迭代的(可以用於循環的for...of )+所有原型方法,例如findfilter等。記住這一點,將字符串鍵控屬性添加到數組是絕對有效的(不建議使用)javascript,並且僅僅因為console.log在輸出數組時會應用特殊格式,所以您會得到[ foo: 'one', bar: 'two' ] (帶方括號)。

您甚至可以自己編寫一些非常粗糙的數組實現,例如: https : //jsfiddle.net/t96ehm1r/ (當然,沒有用於快速初始化的語法糖和所有原型方法,等等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM