當(dāng)我們在使用JavaScript來操作數(shù)組或?qū)ο髸r(shí),如果我們訪問了超過數(shù)組或?qū)ο箝L度的下標(biāo),程序就會(huì)出現(xiàn)下標(biāo)越界的錯(cuò)誤,導(dǎo)致程序終止。
下面我們來看一個(gè)例子:
var arr = [1, 2, 3, 4]; console.log(arr[5]); // 輸出undefined console.log(arr[10]); // 輸出undefined console.log(arr[-1]); // 輸出undefined
在這個(gè)例子中,我們定義了一個(gè)數(shù)組arr,它有四個(gè)元素。但是我們試圖訪問的下標(biāo)超過數(shù)組長度,這時(shí)候程序就會(huì)輸出undefined。
還可以使用for循環(huán)來遍歷數(shù)組,同樣會(huì)因下標(biāo)越界而導(dǎo)致程序出錯(cuò)。
var arr = [1, 2, 3, 4]; for (var i = 0; i <= arr.length; i++) { console.log(arr[i]); }
這段代碼中,我們想要遍歷數(shù)組arr并輸出每個(gè)元素,但是在for循環(huán)的條件中我們使用了小于等于號(hào),導(dǎo)致i的值可能會(huì)超過數(shù)組長度,從而出現(xiàn)下標(biāo)越界的錯(cuò)誤。
除了數(shù)組,在操作對象時(shí)也容易出現(xiàn)下標(biāo)越界的錯(cuò)誤。
var obj = {name: 'Tom', age: 18}; console.log(obj['gender']); // 輸出undefined
在這個(gè)例子中,我們試圖訪問對象obj中不存在的屬性gender,導(dǎo)致程序輸出undefined。
為了避免下標(biāo)越界的錯(cuò)誤,我們可以在操作數(shù)組、對象時(shí)先判斷下標(biāo)是否超過長度或?qū)傩允欠翊嬖冢苊獬霈F(xiàn)異常情況。
var arr = [1, 2, 3, 4]; if (arr.length >= 6) { console.log(arr[5]); } if (arr.length >= 11) { console.log(arr[10]); } if (arr[-1] !== undefined) { console.log(arr[-1]); } var obj = {name: 'Tom', age: 18}; if (obj.hasOwnProperty('gender')) { console.log(obj['gender']); }
在這個(gè)例子中,我們先判斷了操作下標(biāo)和屬性的值是否合法,只有合法時(shí)才輸出結(jié)果。
總之,JavaScript中的下標(biāo)越界是一個(gè)非常常見的運(yùn)行時(shí)錯(cuò)誤,我們需要注意代碼中下標(biāo)和屬性的使用,以及合法性的判斷,保證程序運(yùn)行的正確性。