【问题标题】:Why is it impossible to assign constant properties of JavaScript objects using the const keyword?为什么不能使用 const 关键字来分配 JavaScript 对象的常量属性?
【发布时间】:2012-06-06 07:30:34
【问题描述】:

首先,我问过是否可能: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 被更改?

【问题讨论】:

    标签: javascript object properties constants variable-assignment


    【解决方案1】:

    如果您想在现代浏览器中使用不可更改的值,请使用 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,您可能无法删除该属性。

    【讨论】:

      【解决方案2】:

      除了 const 支持和不支持跨浏览器(这是 ES6 功能)这一事实之外,const App.goldenRatio= 1.6180339887 不工作的原因与 var App.goldenRatio= 1.6180339887 不工作的原因相同:您正在设置对象属性,因此在其前面加上 varconst 关键字是语法错误。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2012-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多