JavaScript數(shù)組的一些奇葩行為
在程序語言中數(shù)組的重要性不言而喻,JavaScript中數(shù)組也是最常使用的對象之一,數(shù)組是值的有序集合,由于弱類型的原因,JavaScript中數(shù)組十分靈活、強大,不像是Java等強類型高級語言數(shù)組只能存放同一類型或其子類型元素,JavaScript在同一個數(shù)組中可以存放多種類型的元素,而且是長度也是可以動態(tài)調(diào)整的,可以隨著數(shù)據(jù)增加或減少自動對數(shù)組長度做更改。
今天,復習了一下JavaScript的數(shù)組,然后,把他的一些奇葩行為總結(jié)了一下,在這里和大家share一下,如果有不對的地方,歡迎指出!
奇葩1:Array()構(gòu)造器函數(shù)可以不使用new關(guān)鍵字進行調(diào)用:
Array()構(gòu)造器使用傳遞給他的參數(shù)作為數(shù)組的元素,從而創(chuàng)建數(shù)組,一般的,我們是如下調(diào)用的:
var a = new Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
但是,省略掉new也是可以的,如下:
var a = Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
雖然,我不知道他的內(nèi)部實現(xiàn)機制是什么,但是,猜想他的構(gòu)造器函數(shù)可能是如下定義的:
function Array(args) { //如果,this不是Array的實例的話, //說明不是通過new調(diào)用的,則在這里再重新調(diào)用 if( !this instanceof Array) { return new Array(args); }//后面是正常調(diào)用時的實現(xiàn)代碼
//...
}
奇葩2:當只傳一個參數(shù)給構(gòu)造函數(shù)時,行為莫測
如果只傳一個參數(shù),并且這個參數(shù)是一個整數(shù),將會得到一個數(shù)組,并且length等于這個參數(shù)
var a = new Array(12); console.log(a.length); //12 console.log(a); //[]
如果只傳一個浮點數(shù),就會報錯:
var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…)
傳遞一個字符串就會正常工作,并且該字符串作為數(shù)組的第一個元素:
var a = new Array("1.1"); console.log(a.length); // console.log(a); //["1.1"]
但是為了避免二義性,我建議最好是是直接使用字面量的形式創(chuàng)建數(shù)組:
var a = []; //空數(shù)組 var a = [1, 1, "bom"]; //三個元素 var a = [12]; //一個元素,并且元素是12
奇葩3:數(shù)組的length屬性可以被修改(可寫)
如下,我們直接把本來是2的length改成了100,而且還修改成功了!??!
var a = [1, 2, 3, 4]; console.log(a.length); //4 a.length = 100; console.log(a.length); //100
雖然length等于100,但是,元素a[4]-a[99]是不存在的,并且如果你請求他們的值的話,例如,從0到a.length做一個循環(huán)中做的話,那么會得到undefined。
接下來再看:
var a = [1, 2, 3, 4]; a.length = 100; console.log(a[10]); //undefined console.log(99 in a); //false
與下面的例子有點相似:
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(a.length); //100
不同之處在于,這里的a[99]存在了,因為我們創(chuàng)建了它,即使他擁有的是undefined的值。但是從a[4]到a[98]的所有元素則是不存在的,如下:
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(99 in a); //true; console.log(98 in a); //false console.log(a.length); //100
以上所述給大家分享了JavaScript數(shù)組的一些奇葩行為,文章寫的不好還請見諒,謝謝!
相關(guān)文章
微信小程序?qū)崿F(xiàn)選擇內(nèi)容顯示對應內(nèi)容
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)選擇內(nèi)容顯示對應內(nèi)容,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07微信小程序?qū)崿F(xiàn)image組件圖片自適應寬度比例顯示的方法
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)image組件圖片自適應寬度比例顯示的方法,簡單講述了image組件的常用屬性,并結(jié)合實例形式分析了微信小程序?qū)崿F(xiàn)圖片自適應寬度比例的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01javascript Onunload與Onbeforeunload使用小結(jié)
Onunload,onbeforeunload都是在刷新或關(guān)閉時調(diào)用,可以在<script>腳本中通過window.onunload來指定或者在<body>里指定。區(qū)別在于onbeforeunload在onunload之前執(zhí)行,它還可以阻止onunload的執(zhí)行。2009-12-12