2

首先,我问是否有可能:如何使用 const 关键字创建 Javascript 常量作为对象的属性?

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

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

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

如果可能,会造成什么样的损害?

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

4

4 回答 4

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并且您可能不会删除该属性。

于 2012-06-01T03:30:13.470 回答
2

const除了支持和不支持跨浏览器的事实(它是 ES6 功能)之外,const App.goldenRatio= 1.6180339887由于相同的原因var App.goldenRatio= 1.6180339887不起作用:您正在设置一个对象属性,所以在它前面加上一个var或是一个语法错误const关键词。

于 2013-02-19T18:04:38.997 回答
0

var MY_CONSTANT = "一些值"; 您可以使用 ALL_CAPS 之类的约定来表明不应修改某些值

于 2012-06-01T03:10:40.423 回答
0

将回答您要问的问题并说 never use const。解释器对它不做任何事情。它所做的只是误导开发人员认为他/她可以假设值永远不会改变,这与const关键字不存在的可能性差不多。

于 2012-06-01T03:12:20.250 回答