Har*_*iec 54 javascript if-statement
我在JavaScript代码中找到了这个字符串.
var c = (a.b !== null) ? a.b : null;
Run Code Online (Sandbox Code Playgroud)
这是if-else语句的简写,但如果为null,则赋值null.这不总是相当于
var c = a.b
Run Code Online (Sandbox Code Playgroud)
包括所有情况 - 例外,null,undefined等?
换句话说,这些线(总是)是等价的吗?
var c = (a.b !== null) ? a.b : null;
Run Code Online (Sandbox Code Playgroud)
航班吗
var c = a.b
Run Code Online (Sandbox Code Playgroud)
pot*_*ngs 94
不,如果b是更新变量的getter,则它们总是不相等.以这种方式编码是不好的做法
var log = 0;
var a = {
get b() {
log++;
return log;
}
}
var c = (a.b !== null) ? a.b : null;
// outputs 2
console.log(c);
Run Code Online (Sandbox Code Playgroud)
var log = 0;
var a = {
get b() {
log++;
return log;
}
}
var c = a.b;
// outputs 1
console.log(c);
Run Code Online (Sandbox Code Playgroud)
Riv*_*ver 20
这些陈述在逻辑上是等价的.
话虽如此,并且如另一个答案所述,如果a.b有副作用,这些陈述将不会导致相同的程序状态.
这可以很容易地以var c具有不同值的形式显而易见,这取决于执行这些语句中的哪一个,或者如果a.b修改程序中的其他内容则更隐蔽.
由于已经讨论了重构,我将简要介绍一下.由于上述情况有望显而易见,直接重构在所有情况下都不安全.但是,我仍然建议使用这种或那种重构器.
我看到的两种可能情况是:
a.b 没有副作用,直接重构是安全的a.b有隐藏的副作用.这代表了非常不清楚,令人困惑,只是彻头彻尾的糟糕代码.它应该被重构,以便在语句中发生的所有更改对于读者来说都是清楚和明显的(希望直观地如此,以及由评论支持).| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |