關於js 物件 容易被忽視的排序問題

2022-08-27 01:12:12 字數 732 閱讀 8618

在js中 object 籠統的理解可以是 key 和 value的對應集合。 比如  

而陣列是索引(index) 和數值的集合,如[a1,b1,c1] ,索引 0,1,2對應的數值分別是a1,b1,c1

我們知道在js中 陣列是物件中的一種特殊形式,上面的列子也大概能夠反映出陣列和物件的一些關係和區別。

接下來就談一談陣列和物件之間容易被我們忽視的排序問題。

var object1 = ;

for(var key in

object1)

我相信很多人和我一樣 會認為上面的輸出結果是 b c a

可事實上 執行結果是

"a"

"b""c"

原因就是:

在陣列中,預設是按照索引值由小到大來輸出數值的。

而當物件object1中的key是數字的時候,物件的key的功能就和陣列中的索引一樣了。輸出的時候 會按照key由小到大來輸出。

object1難道變成陣列了嗎?

怎麼可能呢? 當試著輸出 object1.length 結果卻是 undefined.

說明 object1還是物件,而非陣列。

至於為什麼?  說法如下

使用 for-in 語句遍歷物件屬性時會遵循乙個規律,它們會先提取所有 key 的 parsefloat 值為非負整數的屬性,

然後根據數字順序對屬性排序首先遍歷出來,然後按照物件定義的順序遍歷餘下的所有屬性。

容易被忽視的synchronized

public static final synchronized callmanager getinstance return minstance synchronized,多執行緒訪問同步鎖,具有以下特性 1 同一時間只允許乙個執行緒訪問 2 在乙個執行緒訪問synchronized 塊時,另乙個...

sql 容易被忽視的點

1 dual select查詢語句只有 select 就可以,但為了規範,湊結構,可以加個 dual 例 select now from dual 這個概念是oracle中的。在mysql中可寫可不寫。2 drop,delete truncate 的區別drop用於刪除資料庫,資料表的字段,刪除表 ...

C reference 那些容易被忽視的細節

工作之餘做個小結。te為實體型別,td為推斷型別 引用建立時即初始化賦值。作為函式引數時,程式進入函式就已經初始化完畢。注意區分值與值的引用。一旦創造了te t右值引用便有了別名,t的行為變成左值 傳入td 模板為左引用,但t列印出的型別依然為右值引用是別名,構造好的引用可當作自身,引用之間的非初始...