鍍金池/ 問(wèn)答/HTML/ js數(shù)組循環(huán)問(wèn)題

js數(shù)組循環(huán)問(wèn)題

for(var i = 0; i < aLi.length; i++) {

        aLi[i].index = i;   //aLi[i].index 為什么這里可以定義index,屬性訪問(wèn)表達(dá)式不是必須存在才可以,不然會(huì)報(bào)錯(cuò)的嗎?

還有個(gè)小問(wèn)題,i代表下標(biāo),aLi[i]是下標(biāo)里的元素的值嗎?

回答
編輯回答
不歸路

看起來(lái)你js的基本語(yǔ)法好像不是很清楚的樣子,推薦阮老師的教程

先回答小問(wèn)題:

還有個(gè)小問(wèn)題,i代表下標(biāo),aLi[i]是下標(biāo)里的元素的值嗎?
你的aLi應(yīng)該是一個(gè)數(shù)組,aLi[i]就表示數(shù)組里的第i個(gè)元素
假設(shè) aLi = [1, 2, 3]
則 aLi[0] = 1

然后是主要的問(wèn)題:
你執(zhí)行了aLi[i].index = i;這一句,說(shuō)明aLi[i]是一個(gè)對(duì)象
首先要明確的一點(diǎn)是,這是一個(gè)賦值操作
如果index屬性不存在aLi中,js會(huì)幫你聲明這個(gè)屬性,并且用i的值來(lái)初始化它;如果index屬性已經(jīng)存在于aLi中,js會(huì)將aLi.index的值設(shè)為i的值

屬性訪問(wèn)表達(dá)式不是必須存在才可以,不然會(huì)報(bào)錯(cuò)的嗎?

我想,你說(shuō)的應(yīng)該是,變量沒(méi)定義, 會(huì)報(bào)錯(cuò), 比如:

a // Uncaught ReferenceError: a is not defined

a.index = 4 // Uncaught ReferenceError: a is not defined

假設(shè)上面示例代碼的a首先聲明為一個(gè)對(duì)象的話

var a = {}
a.xyz // undefined
a.anything // undefined
a.任何東西都是undefined // undefined

可以粗暴理解為,在對(duì)象上找不到屬性,就是會(huì)返回undefined,不會(huì)報(bào)錯(cuò)就好了
更詳細(xì)的,推薦閱讀:你不知道的JS這一章的[[Get]]和[[Put]],如果英語(yǔ)好,英文原版

第一次回答,不足之處請(qǐng)指出啦~

2017年2月3日 13:25
編輯回答
涼汐

這需要知道aLi里面放的是什么,aLi[i]表示i位置的值(這里aLi應(yīng)該表示一個(gè)可聲明屬性的對(duì)象,如html標(biāo)簽)

2018年4月15日 23:56