js数组循环问题

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

        aLi[i].index = i;   //aLi[i].index 为什么这里可以定义index,属性访问表达式不是必须存在才可以,不然会报错的吗?

还有个小问题,i代表下标,aLi[i]是下标里的元素的值吗?

阅读 2.2k
2 个回答

看起来你js的基本语法好像不是很清楚的样子,推荐阮老师的教程

先回答小问题:

还有个小问题,i代表下标,aLi[i]是下标里的元素的值吗?
你的aLi应该是一个数组,aLi[i]就表示数组里的第i个元素
假设 aLi = [1, 2, 3]
则 aLi[0] = 1

然后是主要的问题:
你执行了aLi[i].index = i;这一句,说明aLi[i]是一个对象
首先要明确的一点是,这是一个赋值操作
如果index属性不存在aLi中,js会帮你声明这个属性,并且用i的值来初始化它;如果index属性已经存在于aLi中,js会将aLi.index的值设为i的值

属性访问表达式不是必须存在才可以,不然会报错的吗?

我想,你说的应该是,变量没定义, 会报错, 比如:

a // Uncaught ReferenceError: a is not defined

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

假设上面示例代码的a首先声明为一个对象的话

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

可以粗暴理解为,在对象上找不到属性,就是会返回undefined,不会报错就好了
更详细的,推荐阅读:你不知道的JS这一章的[[Get]]和[[Put]],如果英语好,英文原版

第一次回答,不足之处请指出啦~

这需要知道aLi里面放的是什么,aLi[i]表示i位置的值(这里aLi应该表示一个可声明属性的对象,如html标签)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题