JS解惑 Object中的key是有序的麼?

2021-09-24 07:18:57 字數 1644 閱讀 8586

當我們使用for/in遍歷乙個object物件的時候,列印的結果是否按key的順序列印出來呢?

答案是:不一定

最近在做乙個專案的時候,遇到這樣乙個需求:

乙個下拉列表中有3個固定選項,包括:-1:全部;0:正常;1:失效

於是,我就定義了乙個物件,然後迴圈這個物件,把結果放到上面:

var obj = ;

複製**

v-for="(item, key) in obj"

:value="key">}option>

select>

複製**

於是就有了今天這篇文章,且看下文。

object的key的排序規則到底是什麼樣子的呢?答案是:

如果key是整數(如:123)或者整數型別的字串(如:「123」),那麼會按照從小到大的排序。除此之外,其它資料型別,都安裝物件key的實際建立順序排序。

var obj = ;

for (let key in obj) ;

// result

// 0 正常

// 1 失效

// -1 全部

複製**

另外,如果key中除了整數或者整數型別的字串外,還含有其它資料型別,則整數放在最前面,比如:

var obj = ;

for (let key in obj) ;

// result

// 1 333

// 3 555

// a 111

// 我 222

// 1.3 444

複製**

那還是上面的問題,我如何讓物件按key的順序輸出呢?答案是:

將key轉換成非整數型別的字串,使用的時候再還原。

如果全部是類整數的key,則可以這麼做:

// 每個key後面加.轉換成字串

var obj = ;

for (let key in obj) ;

// result

// -1 全部

// 0 正常

// 1 失效

複製**

但是,如果key是由各種資料型別混合的,那就不能轉換成整數了,可以這麼做:

// 每個key前面加.轉換成字串

var obj = ;

for (let key in obj) ;

// result

// a 111

// 我 222

// 1 333

// 1.3 444

// 3 555

複製**

回歸到我最初遇到的問題,那就這麼解決了:

var obj = ;

複製**

v-for="(item, key) in obj"

:value="~~key">}option>

select>

複製**

js中的Object介紹

object 建構函式,例項不指向建構函式,所以不能呼叫建構函式中的方法,建構函式中也有方法,這些方法就是提供一些工具。靜態方法,類方法 object.assign obj 將obj屬性拷貝到第乙個引數物件中,並且返回 object.keys obj 獲取obj物件中所有屬性 object.defi...

js 中object物件的操作

n object物件 for var p in n 繼之前js中陣列的常用方法之後,object的常用方法和屬性也是很常用的。故,總結之。一 屬性 object自帶乙個prototype的屬性,即object.prototype,object.prototype本身也是乙個物件,也會有一些屬性和方法...

JS中的array和Object的區別

區別 陣列表示有序資料的集合,物件表示無需資料的集合。如果資料順序很重要的話,就用陣列,否則就用物件的好。陣列的資料沒有名稱 name 物件的資料有名稱 name 但是在很多程式語言中有個叫關聯陣列的,這種陣列中的資料是有名稱的。如何區分array和object 1 通過isarray方法 使用方法...