在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列印出的型別依然為右值引用是別名,構造好的引用可當作自身,引用之間的非初始...