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