1
noe132 2018-03-14 10:03:30 +08:00 via Android
没有
|
2
zhuangzhuang1988 2018-03-14 10:05:40 +08:00
没有
|
3
MeteorCat 2018-03-14 10:06:51 +08:00 via Android
没有
|
4
viko16 2018-03-14 10:18:36 +08:00 1
「清除对象用 obj.attr = undefined 」
永远不要手动赋 undefined,给 null 吧,效果一样的 |
5
crysislinux 2018-03-14 10:23:58 +08:00 via Android
const 不合适就 let 啊,我不喜欢 arr.length. = 0 这种
|
6
wengjin456123 2018-03-14 10:25:09 +08:00
没有
|
7
murmur 2018-03-14 10:27:19 +08:00 2
全 let 就可以
这种东西本来就是约束老实人的 别说 js 了 java 里各种反射 c 里各种 cast 还不是一顿魔改访问权限 我感觉这样更好 var v1 =xxx ;//谁改这个全家死 |
8
murmur 2018-03-14 10:29:51 +08:00
另外我个人感觉 对于 js 这种弱类型 var 起家的语言 用全大写下划线命名的约束力可能都比 const 强
|
9
MinonHeart 2018-03-14 10:31:04 +08:00
有
多两个字符要敲打,增加手指的压力,不利于身心健康 |
10
JamesRuan 2018-03-14 10:34:28 +08:00 2
我的代码里基本没有 let,var 一个都没有,99.9%都是 const。
这个约束对于编译器来说就是个优化提示,一般没什么用处,但对于写代码的来说,是防止随意修改变量的一个防御手段。 基本不用变量就能防止一大部分 bug 了,(当然如何你没有意识到不用变量的好处,const 对你来说就是没有用的)。 |
11
morethansean 2018-03-14 10:41:10 +08:00 1
除非是真的 const 否则建议都是 let.
动不动新起一个变量就 const 还得考虑半天我底下到底会不会在处理的过程中改掉他,然后突然发现逻辑一改还是要改一下的拖到上面去把 const 改回 let 真的是太烦人了。 最讨厌的就是有人说,你的代码里这个变量没有改啊 eslint 都会建议你把这个变量弄成 const 呢。 |
13
leemove 2018-03-14 10:46:12 +08:00
const 挺好的啊,比起标记让别人不要改这个变量,莫不如靠规则来制约.
|
14
mcfog 2018-03-14 10:50:33 +08:00
几乎全 const 路过,要用 let 的时候我会反复怀疑是不是代码该重构了
|
15
DRcoding 2018-03-14 10:57:31 +08:00
乃们就没有动态的变量嘛,也用 const 嘛,QAQ
|
17
murmur 2018-03-14 11:01:00 +08:00 1
@DRcoding 这种思维是有的,当年 erlang 不就是靠无变量解决并发问题么 没有变量就不需要锁 没有锁并发自然就上去了
|
18
otakustay 2018-03-14 11:02:10 +08:00 1
用 const 有危害吗 - 几乎没有
用着 const 但不 immutable 有危害吗 - 危害大了去了 |
19
SoloCompany 2018-03-14 11:41:48 +08:00 1
最大的害处就是没法对齐, 而且常量和不可写的变量不是同一个概念, 我记得这应该属于 ECMA2015 的一个设计错误了, 远没有 var / val / let 这种设定合理, 估计因为 const 是 ECMA 的远古保留字所以才混用了吧
|
20
wivwiv 2018-03-14 11:42:11 +08:00 1
让我们来听听 eslint 怎么说
|
21
nodekey 2018-03-14 11:47:27 +08:00 1
effective cpp 条款 03 尽可能使用 const
(我知道你们不在讨论 cpp …… |
22
Mutoo 2018-03-14 11:51:59 +08:00
多打两个键,手疼。
|
23
codermagefox 2018-03-14 11:53:50 +08:00
@wwjvtwoex #12 如果我没记错的话,栈里的数据不能改变,堆里的东西可以任意操作。
|
24
brickyang 2018-03-14 11:56:02 +08:00 via iPhone
标题是「过度使用」。过度指超过应有的限度,比如不能用 const 的时候用了而导致报错。
大量(甚至几乎全部)使用 const 没什么问题,但「过度使用」是有害处的。 |
25
BlockBlockBlock 2018-03-14 11:56:33 +08:00 via iPhone
没被 var 坑过说明你们太年轻了
以及…为什么还会有 const 改回 let 的奇葩需求… 为什么我写代码的时候几百个变量里面最多也就一两个需要 let 的?而且大概率还是在 foe 循环里,或者是需要夸 try catch 作用域的情况 |
26
ChefIsAwesome 2018-03-14 12:07:59 +08:00 3
const 是我最讨厌的 es6 特性之一。约束一个变量不能被重新赋值有毛用。用了 const 很容易让人觉得这个变量是不能改的,跟 immutable 混淆。
|
27
zsx 2018-03-14 12:58:22 +08:00
我基本上只有 flag / 循环变量等地方用 let
|
28
xiaojie668329 2018-03-14 13:02:39 +08:00 via iPhone
能用 const 就用 const,反正不要用 var。
|
29
469054193 2018-03-14 13:25:00 +08:00
const 基本上是 eslint 规范了
|
30
sniffles 2018-03-14 13:43:03 +08:00
一看到 const,心里就稳得不行
不像是 let,var 还要往后看是不是还会变 |
31
svenzhao 2018-03-14 14:15:16 +08:00
@ChefIsAwesome const 声明一个只读的常量。一旦声明,常量的值就不能改变。
|
33
BlockBlockBlock 2018-03-14 14:20:39 +08:00
|
34
ke1vin 2018-03-14 14:30:54 +08:00
@SoloCompany 不能对齐怎么解释,var(let)/val 不就和 let/const 设计差不多么
|
36
IvanLi127 2018-03-14 15:02:02 +08:00 via Android
过度?不存在的,只要不会变就应该用 const
|
38
murmur 2018-03-14 15:42:50 +08:00
@svenzhao 对啊 所以我更喜欢那种用全大写标识常量的 至少不需要 IDE 也不需要 es6 光凭直觉就知道他是常量
还是那句话 语言本身只能约束老实人 真正想改的怎么改都有一万种方法 一个弱类型预言非要添油加醋结果最后和 c 不像和 java 也不像 |
39
svenzhao 2018-03-14 16:42:49 +08:00
@murmur 但是 js 也是要经过编译 cons let 的存在 理论上从词法分析上面就会快一些 而且也可以在程序预编译阶段暴露出很多不规范的写法.
你不能因为它本来烂就不让它往好的方向发展不然也不会有那么多人推 typescript 了. 现在 js 的项目越来越大 不论 node 还是前端 这种 var 常量某一个层级非常高的类使用了 如果被改变不报错 业务逻辑展示不正常 出现 js 的调用栈 调试成本非常高. 如果真的要冻结对象 freeze 也是可以做到的. 你要随便简单小页面那随便 出问题了 人脑也能 debug 的过来. |
40
BearD01001 2018-03-14 17:06:50 +08:00 via iPhone
感觉 arr.length = 0 要比 arr = [] 要多敲好几个键盘 - -!
|
41
BearD01001 2018-03-14 17:07:42 +08:00 via iPhone
优先 const,其次 let,弃用 var。
|
42
zhouyg 2018-03-14 17:13:40 +08:00
多用 const 属于最佳实践的范畴
|
43
allenx 2018-03-14 17:28:23 +08:00
老夫写 cpp,能用 const 就用 const,多打几个字以后调试的时候就知道多方便了,至少 const 的变量就不用管了,const 的函数也不需要过于关心。
|
44
shyling 2018-03-14 17:43:41 +08:00
就是打字累了吧,毕竟 const 5 个字符,let var 都是 3 个(
|
45
xierch 2018-03-14 17:48:03 +08:00
所以现在有些新语言就是默认 const 的嘛
|
46
DOLLOR 2018-03-14 17:49:38 +08:00
尽量用,并且配合预处理工具用。
|
47
ConradG 2018-03-14 17:52:52 +08:00
简单类型建议尽可能用 const
js 由于没有 const 方法,不建议其他的对象类型使用 const |
48
MinonHeart 2018-03-14 18:52:08 +08:00 1
@DRcoding const d = {var: 0}; d.var = 1; 动态,不失“优雅”
--- var a = [1,2,3]; var b = a; // 如果想要 a,b 同时保持相同的引用,const 就非常推荐用了 a = []; |
49
cccRaim 2018-03-14 19:15:33 +08:00
清除对象不应该用 delete obj.attr 吗
|
50
smilingsun 2018-03-14 19:51:47 +08:00
怎么感觉自己不是写 js 的,用 let 有什么坑吗?
|
51
otakustay 2018-03-14 21:26:36 +08:00
@BearD01001 但是 arr.length = 0 少生成一个垃圾,为 GC 争取了幸福
|
52
gnaggnoyil 2018-03-14 23:20:46 +08:00
@murmur 可是 c 里面确实不能通过 cast 来去除 const 啊,除非你把触发未定义行为也定义为"能"
|
53
DRcoding 2018-03-15 09:15:11 +08:00
@MinonHeart 握草,还有这种姿势,是万万没有想到啊,受教了感谢,另外总感觉用关键字做对象属性名字怪怪的,js 这奇怪的设定,QAQ
|
54
raighne 2018-03-15 09:18:04 +08:00
部分老安卓手机会不支持
|
55
e8c47a0d 2018-03-19 09:30:32 +08:00
唯一的害处是,代码会变得很长
|