var a = ['li', 'hao'];
var b = {
0: 'li',
1: 'hao',
}
请问,更推荐哪种写法?以及为啥?
1
cctv1005s927 2018-04-11 20:39:49 +08:00
如果你要表达的是数组,毫无疑问是第一种。
原因: 1,代码表达的是作者的意思,既然要表达数组,那就应该用数组 2,既然要表达的是数组,那么使用数组后能够使用 Array 的原生方法,这样既不需要去引用第三方库,降低学习成本,又能增加程序的可读性。 |
2
cctv1005s927 2018-04-11 20:40:15 +08:00
实在不知道这种写法是哪里学来的...
|
3
murmur 2018-04-11 20:44:02 +08:00
第二种写法是讲鸭式判别的练习题?
|
4
des 2018-04-11 20:44:30 +08:00 via Android
@cctv1005s927 估计是最好的语言吧
|
5
crs0910 2018-04-11 20:45:10 +08:00 via Android
数组有序 object 是无序的
|
6
rabbbit 2018-04-11 20:45:50 +08:00
写法 b 有啥好处吗?
要插入一个数,a 直接就插了 a.splice(1,0,'lll'), b 咋办 |
7
crs0910 2018-04-11 20:46:08 +08:00 via Android
还有 你的问题问的不清不楚的
|
8
leslie000666 OP @cctv1005s927 哦?那你觉得应该怎么写?
|
9
ETiV 2018-04-11 21:01:41 +08:00 via iPhone
没有上下文的情况下无法判断哪种更好
|
10
leslie000666 OP @crs0910 写法更好的含义包括,语义,语法规范,数量量够大时的性能等
|
11
Cbdy 2018-04-11 21:14:20 +08:00
使用第一种
|
12
noe132 2018-04-11 21:19:35 +08:00 5
从性能上来分析
其实很多情况不需要考虑性能。如果不是做计算密集的处理,仅仅是浏览器客户端的执行,性能影响几乎可以忽略不计。 https://stackoverflow.com/questions/8423493/what-is-the-performance-of-objects-arrays-in-javascript-specifically-for-googl 参考这篇文章,Array 的 push pop 大约是 Object 的 20 倍。 shift 虽比 pop 慢 6 倍,但仍然是 Object delete 效率的 100 倍。 从代码可读性角度上看,Array 字面量足够清晰。写法 2 过于冗余。 从数据结构上来看,Array 继承 Array.prototype 的一系列方法,并且 Array 的元素 index 和 length 都是动态的,写法 2 并没有 从语法规范,你这两种写法都是正确的,你怎么开心怎么写。 实际情况呢? 除非 index 是固定值的情况,如 key 为 number 的某哈希散列,不太可能有机会用到第二种形式。 因为 array 会继承 Array 的方法,Object 类型没有响应的操作,如果需要进行响应的操作写法会很不方便。 当然,如果你要自己实现一个用 Object 来实现的类 Array 对象也没有问题。 有时候有些确实会钻进牛角尖,比如这个例子。很多时候总是在想是这样好还是那样好,想了半天结果代码没写多少。实际上,当你不知道哪一种写法好的时候,选一种你觉得还可以的写法写下去就行了。遇到了不方便、不好用、不适合的情况自然就有答案,各种选择的优劣何在了。 |
13
crs0910 2018-04-11 21:19:49 +08:00 via Android
如果你要的是数组,那就只有第一种。
|
14
leslie000666 OP @noe132 👍靠谱
|
15
k9982874 2018-04-11 22:12:05 +08:00 via iPad
哈希表和链表的区别
|
16
LeungJZ 2018-04-11 22:55:00 +08:00
如果表达是个数组,那就用第一种。
如果表达是个对象,那就用第二种。 因为很多时候,我都会用对象缓存某些数据,以数据的 id 为键值,因为这么取数据比较方便。 |
17
zhwithsweet 2018-04-11 23:10:55 +08:00 via iPhone
难道不是 a['0']a ?
|
18
zhwithsweet 2018-04-11 23:11:21 +08:00 via iPhone
key 是字符串吧?
|
19
bhaltair 2018-04-11 23:43:49 +08:00
var b = {
0: 'li', 1: 'hao', length: 2 } Array.from(b) |
20
Leigg 2018-04-12 09:02:49 +08:00 via Android
对象的 key 又是一个字符串
|
21
codehz 2018-04-12 09:32:15 +08:00
@zhwithsweet #18 JS 的 key 可以是字符串也可以是整数,甚至还可以是标识(Symbol)
|
22
faceRollingKB 2018-04-12 14:43:01 +08:00
第一种写法是数组,第二种写法是字典,各有各的用途,取决于你的设计
|