为什么使用const关键字分配JavaScript对象的常量属性是不可能的?

时间:2012-06-01 02:51:10

标签: javascript object properties const variable-assignment

首先,我问过是否有可能:How to create Javascript constants as properties of objects using const keyword?

现在,我得问:为什么?我的回答似乎是“只是因为”,但做这样的事情会非常有用:

var App = {};  // want to be able to extend
const App.goldenRatio= 1.6180339887  // throws Exception

为什么在激活对象上设置的常量可以工作但在设置时不能在其他任何设置上设置?

如果可能的话会造成什么样的伤害?

const的目的是什么,如果不是为了防止公共API被更改?

4 个答案:

答案 0 :(得分:4)

如果您想在现代浏览器中使用不可更改的值,请使用defineProperty创建不可写(也称为只读)属性:

var App = {};
Object.defineProperty(App,'goldenRatio',{value:1.6180339887});
console.log( App.goldenRatio ); // 1.6180339887
App.goldenRatio = 42;
console.log( App.goldenRatio ); // 1.6180339887
delete App.goldenRatio;         // false
console.log( App.goldenRatio ); // 1.6180339887

如果您未将选项中的writable:true传递给defineProperty,则默认为false,因此会默默地忽略您尝试对该属性进行的任何更改。此外,如果您未通过configurable:true,则默认为false,您可能无法删除该属性。

答案 1 :(得分:2)

除了const跨浏览器(不是ES6功能)支持const App.goldenRatio= 1.6180339887这一事实外,var App.goldenRatio= 1.6180339887出于同样的原因var不起作用: '重新设置一个对象属性,因此使用const或{{1}}关键字将其添加为语法错误。

答案 2 :(得分:0)

var MY_CONSTANT =“some-value”; 您可以使用ALL_CAPS等约定来显示不应修改某些值

答案 3 :(得分:0)

要回答你想问的问题,并说永远不要使用const。口译员对此没有任何作用。它所做的只是误导开发人员思考他/她可以假设价值永远不会改变,这与const关键字不存在的可能性差不多。