JS 写法请教

2018-04-11 20:19:54 +08:00
 leslie000666
var a = ['li', 'hao'];
var b = {
    0: 'li',
    1: 'hao',
}

请问,更推荐哪种写法?以及为啥?

2719 次点击
所在节点    程序员
22 条回复
cctv1005s927
2018-04-11 20:39:49 +08:00
如果你要表达的是数组,毫无疑问是第一种。

原因:
1,代码表达的是作者的意思,既然要表达数组,那就应该用数组
2,既然要表达的是数组,那么使用数组后能够使用 Array 的原生方法,这样既不需要去引用第三方库,降低学习成本,又能增加程序的可读性。
cctv1005s927
2018-04-11 20:40:15 +08:00
实在不知道这种写法是哪里学来的...
murmur
2018-04-11 20:44:02 +08:00
第二种写法是讲鸭式判别的练习题?
des
2018-04-11 20:44:30 +08:00
@cctv1005s927 估计是最好的语言吧
crs0910
2018-04-11 20:45:10 +08:00
数组有序 object 是无序的
rabbbit
2018-04-11 20:45:50 +08:00
写法 b 有啥好处吗?
要插入一个数,a 直接就插了 a.splice(1,0,'lll'), b 咋办
crs0910
2018-04-11 20:46:08 +08:00
还有 你的问题问的不清不楚的
leslie000666
2018-04-11 21:00:08 +08:00
@cctv1005s927 哦?那你觉得应该怎么写?
ETiV
2018-04-11 21:01:41 +08:00
没有上下文的情况下无法判断哪种更好
leslie000666
2018-04-11 21:02:06 +08:00
@crs0910 写法更好的含义包括,语义,语法规范,数量量够大时的性能等
Cbdy
2018-04-11 21:14:20 +08:00
使用第一种
noe132
2018-04-11 21:19:35 +08:00
从性能上来分析
其实很多情况不需要考虑性能。如果不是做计算密集的处理,仅仅是浏览器客户端的执行,性能影响几乎可以忽略不计。
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 对象也没有问题。

有时候有些确实会钻进牛角尖,比如这个例子。很多时候总是在想是这样好还是那样好,想了半天结果代码没写多少。实际上,当你不知道哪一种写法好的时候,选一种你觉得还可以的写法写下去就行了。遇到了不方便、不好用、不适合的情况自然就有答案,各种选择的优劣何在了。
crs0910
2018-04-11 21:19:49 +08:00
如果你要的是数组,那就只有第一种。
leslie000666
2018-04-11 21:28:34 +08:00
@noe132 👍靠谱
k9982874
2018-04-11 22:12:05 +08:00
哈希表和链表的区别
LeungJZ
2018-04-11 22:55:00 +08:00
如果表达是个数组,那就用第一种。
如果表达是个对象,那就用第二种。
因为很多时候,我都会用对象缓存某些数据,以数据的 id 为键值,因为这么取数据比较方便。
zhwithsweet
2018-04-11 23:10:55 +08:00
难道不是 a['0']a ?
zhwithsweet
2018-04-11 23:11:21 +08:00
key 是字符串吧?
bhaltair
2018-04-11 23:43:49 +08:00
var b = {
0: 'li',
1: 'hao',
length: 2
}
Array.from(b)
Leigg
2018-04-12 09:02:49 +08:00
对象的 key 又是一个字符串

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446045

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX