ES6开始,我们有 const。
const
这是不允许的:
const x; //declare first //and then initialize it if(condition) x = 5; else x = 10;
这是有意义的,因为它阻止我们在初始化常量之前使用它。
但如果我这么做了
if(condition) const x = 5; else const x = 10;
X 成为块作用域。
那么如何有条件地创建一个常量呢?
假设将在 都有实例中声明 const,您可以使用三元赋值:
const x = condition ? 5 : 10;
你们的问题,如你们所知,是 const必须用声明它的表达式来初始化。
这并不意味着赋给常量的值必须是字面值。它可以是任何有效的表达式,实际上是三元组:
const x = IsSomeValueTrue() ? 1 : 2;
或者把它赋给变量的值?
let y = 1; if(IsSomeValueTrue()) { y = 2; } const x = y;
当然,你也可以把它赋给函数的返回值:
function getConstantValue() { return 3; } const x = getConstantValue();
所以有很多方法可以让价值动态变化,你只需要确保它只被分配到一个地方。
如果三元操作符不是一个不可读的选项,那么唯一的另一个选项是 IIFE,它很麻烦,但可以流利地阅读:
const x = (() => { if (condition) return 5 else return 10 })();
const的语义是它被分配了一次。对于这个用例,它应该是 let:
let
let x; if(condition) x = 5; else x = 10;
根据我个人的经验,大约95% 的变量是 const。如果一个变量必须是 let,那么就让它成为它自己; 由意外重新分配引起的错误的可能性是可以忽略不计的。