美文网首页JS一筐筐
JS数组的数字和非数字下标

JS数组的数字和非数字下标

作者: 高花椰菜子 | 来源:发表于2017-06-16 18:44 被阅读0次

正在安静的撸码,PHP老公突然Q我,问,“你们JS里数组能用非数字下标吗。”

并没有仔细思考的我,扔给他一句,“不行,闹呢,2的32次方都不够使了么。”

然而,事情并没有如我所料的结束,片刻之后,他滴滴我,说“你个大混子,这是可以的。”然后扔给我一个截图。

JS的Array是可以有非数字下标的,就是有些行为怪异。你说这人非要用PHP什么的东西往JS里套,还来麻烦我,我能怎么办,我也很绝望啊。控制台里看一下吧。

let a=[];
a['aa']='bb'
console.log(a);
//[aa: "bb"]
//aa: "bb"
//length: 0

霸气的把length=0化了线zhuai给他。JSer们并不怎么用这个奇怪的写法是有原因的啊。length=0了你要我们怎么办!.pop()和.shift()等作用于数组元素的方法你要我们怎么用?恩?

再者,如果不是 === 的情况下,JS很难分清'1'和1有什么区别。所以如果你的下标突然变成了一个字符串数字就有意思了。

let a=[];
a['aa']='bb';
a['100']='vvvvv';
console.log(a.length);
//101

就是这么神奇。js表示’100’和100长得一样啊并没有区别啊那个引号是什么我读书少你别骗我。所以这个时候js会自动把a[‘100’]当成a[100]来使用,把当前数组的长度变成100,再把'vvvvv'这个value push到最后,哪怕真实长度只有2……

所以,这是为啥?

当给一个js数组添加字符串下标的时候,就相当于为该数组对象添加了一个自定义属性,这就是所谓的“字符串下标”。而为数组添加属性并不会增加数组长度,所以长度不会发生改变了。你到是能用key找到这个value,但是你并没有办法遍历它。

a.forEach(v=>console.log(v))
//'vvvvv'

看你只能得到后来增加的那个index为101的'vvvvv'。

所以呢,来自stackoverflow的Michael Berkowski:“如果要使用的是一个完全由'字符串下标'组成的数组,那还是将其声明为一个Object类型的对象要更好一些。”

对啊,有对象干嘛还要找数组!数组长得比对象美吗!口亨!

相关文章

  • JS数组的数字和非数字下标

    正在安静的撸码,PHP老公突然Q我,问,“你们JS里数组能用非数字下标吗。” 并没有仔细思考的我,扔给他一句,“不...

  • javascript数组中数字和非数字下标的区别

    javascript数组中数字和非数字下标的区别 因为在之前看多的许多JavaScript书籍中,都宣称js是可以...

  • JS数组

    JS中数组分为索引数组和关联数组(又称哈希数组)。 区别: 索引数组以无意义的数字为下标,哈希数组以有意义的字符串...

  • shell编程(三)

    数组 普通数组 只能以数字作为索引(下标)关联数组 可以使用数字也可以使用字符串作为索引(下标)数组名[索引]...

  • 正则

    匹配数字和非数字并组成数组

  • js

    **索引数组:下标为数字** ```js var a=[1,2,3,4,5,6,7,8,9,10]; //给最后一...

  • 索引数组和关联数组的遍历

    **索引数组:下标为数字** ```js var a=[1,2,3,4,5,6,7,8,9,10]; //给最后一...

  • [LeetCode] 1. Two Sum 题解

    问题描述 给定一个整数数组 nums 和一个目标数字 target,要求返回数组中两个数字的下标,且这两个数字加起...

  • splice()方法在for循环中可能会遇到的坑

    因为splice 是直接操作并修改数组的,所以当找到数字3时在循环中的 i 下标是2,而当删除数字3后,数组下标 ...

  • PHP(5)数组

    一、创建数组(四种方式) 索引数组:下标为数字 关联数组:下标为字符 多维数组:数组里面包含数组 通过 array...

网友评论

    本文标题:JS数组的数字和非数字下标

    本文链接:https://www.haomeiwen.com/subject/wzpmqxtx.html