为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript的稀疏数组问题

JavaScript的稀疏数组问题

smlrole 2015-12-24 15:19:12
这是在看JavaScript权威指南的时候看到的,很不解,a[,,,]和a[,]不一样吗,为什么一个是稀疏数组,一个不是呢?为什么a[,,,]这个自动添加了undefine,而a[,]则没有?
查看完整描述

3 回答

已采纳
?
迷途的马尔斯

TA贡献72条经验 获得超106个赞

a[,,,]和a[,]是不一样的,a[,,,]的长度是3,而a[,]的长度只有1,由括号内的元素个数(逗号的个数)决定;最后,两个都会返回undefined的,你打开浏览器控制台试试

查看完整回答
反对 回复 2015-12-24
  • smlrole
    smlrole
    嗯,试了之后两个返回的都是undefine,而且0 in a1的值都是false;但当我赋值为undefine之后,0 in a1是true,这是什么意思呢?
  • 迷途的马尔斯
    迷途的马尔斯
    同学,我今晚回去翻了一下犀牛书,犀牛书用的还是ECMA5,而现在主流已经是ECMA6了,最新的Chrome和Firefox都支持EC6了,EC6里面重新对数组空位作了调整,你书上第四行代码的"0 in a1"的返回值应该是false的,true已经过时了。在EC6规范下,[,,,]数组表示的是3个空位了,它的length是3,你用for循环遍历的时候是不会跳过空位的了,但你用map方法来遍历就会跳过空位,大概有这些新特性;至于你赋值为undefined后,数组里面有元素了,所以就返回true了,这个应该不难理解吧?至于undefined和空位是有区别的。暂时还没有详细地研究过,我后面详细研究一下再和你分享一下吧
  • smlrole
    smlrole
    非常感谢,苦于后来才知道买书买错了,才凑合看的,原来里面还有点不一样的东西
点击展开后面1
?
mmmmm_魂牵梦萦

TA贡献2条经验 获得超0个赞

 因为中间有逗号分割。一个逗号前面有个数值,他这个没写数值所以是undefined,a=[,]是一个元素undefined。

中间有几个逗号就表示他有几个逗号数量+1的元素,末尾不算,如果没写值,自然是undefined;//img1.sycdn.imooc.com//567ba6d40001774402050091.jpg

查看完整回答
反对 回复 2015-12-24
  • smlrole
    smlrole
    关键在于“0 in a1”这个语句,上面的实例代码是true,而下面的实例代码是false,虽然我之后实践发现两个结果都是false,这书让我有点不明白,是写错了,还是我理解的问题。
  • 3 回答
  • 0 关注
  • 1902 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信