如何检查ES6"变量"是否恒定?

ale*_*ods 7 javascript ecmascript-6

有谁知道一些技巧怎么做?我试着用try-catch:

"use strict";

const a = 20;

var isConst = false;
try {
   var temp = a; a = a+1; a = temp;
} catch (e) {
   isConst = true;
}
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,它仅适用于"严格"模式.没有"use strict",它会默默地执行所有语句,而不进行修改a.此外,我无法将此代码包装到一些方便的函数中(isConstant(someConst)例如),因为我将传递给该函数的任何参数都将是一个新变量.所以任何人都知道如何创建isConstant()功能?

jos*_*osh 2

我认为不存在,但我也不认为这是一个大问题。我认为能够知道变量是否是 ,并且这存在于其他一些语言中可能很有用const,但实际上,由于您(或团队中的某人)将定义这些变量,因此您会知道范围和变量的类型。换句话说,不,你不能,但这也不是问题。

它可能有用的唯一情况是您可以mutable在运行时更改该属性,并且更改此属性是否具有实际的性能优势;letconst、 和 与编译器大致相同,唯一的区别是编译器在编译之前会var跟踪并检查赋值。const

另一件需要注意的事情是,就像let,const的作用域是当前作用域,所以如果你有这样的东西:

'use strict';

const a = 12;

// another scope
{
  const a = 13;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的。请注意,如果您没有在新范围中明确声明,它会在更高的范围中查找const a = 13,并且会给出Read OnlyAssignment错误:

'use strict';

const a = 12;

{
  a = 13; // will result in error
}
Run Code Online (Sandbox Code Playgroud)