本文深入解析JavaScript中关联数组与普通数组的行为差异。通过代码示例说明,使用字符串键(如'1000')或自定义属性名(如'staProjQueryGrid')时,数组实际上作为对象处理,可添加任意属性。而使用数字索引时,会创建稀疏数组,中间元素为undefined。文章还探讨了访问嵌套属性时的引号使用对结果的影响,帮助开发者理解JS中数组即对象的特性。
关联数组与普通数组的基本行为
var privArr = [];
privArr['staProjQueryGrid'] = [{
btn_id : 'but_add',
roles : ['2001','2005']
}]
console.log(privArr,privArr.staProjQueryGrid[0].btn_id)
首先定义一个名为priArr的数组,随后为该数组添加一个名为staProjQueryGird的属性,其值包含一个对象。执行打印操作后,输出结果为but_add。
数字索引与对象属性的区别
var unPrivArr = [];//创建一个空数组并赋给unPrivArr
unPrivArr['1000']=[];//往空数组unPrivArr内插入一个空数组,等价于 unPrivArr[1000]=[]
unPrivArr['1000']['aaa']={'but_check1':1,'but_check2':1};
//给上面插入的那个空数组添加一个名为aaa的属性(因为js里一切皆对 象,所以数组也是对象,可以添加属性和方法),属性值是一个新对象(即{'but_check1':1,'but_check2':1})。
此情形与前例存在显著差异。若方括号内使用数字,则表示数组unPriArr的第1001个元素被赋值为一个空数组(暂称x),而索引0至1000之间的其他元素均为undefined。
若方括号内使用变量,则代表数组unPriArr的对应元素。
第三行代码向变量x添加了一个名为aaa的属性,该属性的值是一个包含键but_check1和but_check2的对象。
可以通过x['but_check1']的方式获取对应的值。
进一步思考,关联数组是否等同于给对象添加属性?
var unPrivArr = [];//创建一个空数组并赋给unPrivArr
unPrivArr['1000']=[];//往空数组unPrivArr内插入一个空数组,等价于 unPrivArr[1000]=[]
unPrivArr['1000']['aaa']={'but_check1':1,'but_check2':1};
console.log(unPrivArr[1000].aaa['but_check1'])
上述代码能正确输出结果1,或者使用unPrivArr[1000].aaa.but_check1也能得到相同结果,但如果添加引号则会导致错误。
若第三行中去掉花括号内的引号,第四行将报错,此时只能使用unPrivArr[1000].aaa.but_check1的方式访问。
以上关于js中关联数组与普通数组的详解内容分享完毕,希望能对大家有所帮助,也欢迎支持本站。