【问题标题】:Can you use constant variables in JavaScript? [duplicate]你可以在 JavaScript 中使用常量变量吗? [复制]
【发布时间】:2011-02-18 18:35:04
【问题描述】:

我在一个网站上读到,您可以在 JavaScript 中创建 constant 变量,例如:

const x = 20;

但在另一个网站上我读到你不能。所以我现在很困惑,现在是什么?

同样在 Visual Studio 2010 中,当我编写 const 时,它会在 JavaScript 文件中加下划线并显示语法错误。

【问题讨论】:

标签: javascript constants


【解决方案1】:

const is a proposed feature of ECMAScript Harmony(连同适当的块范围 let 它应该替换 var 和隐式全局变量)。 ECMAScript Harmony 是 ECMAScript 下一版本的灵感来源。

const 也是 ECMAScript 4 的一部分。

ECMAScript 4 从未发布过,也永远不会发布,ECMAScript Harmony 只会在几年后发布。因此,您不能可靠地使用它。

ECMAScript 的一些实现或派生实现了const(例如,ActionScript)。还有一些实现接受const 作为var 的同义词(IOW,你可以使用const,但它不会给你任何保护。)

但是,除非您绝对可以保证您的代码只能在非常特定的 ECMAScript 衍生的非常特定的实现的非常特定的版本上运行,否则最好避免使用它。 (这真是令人遗憾,因为const 尤其是let 是对var 和隐式全局变量的巨大改进。)

【讨论】:

  • 是的,这对我没有任何好处。太糟糕了,他们真的应该在 javascript 中至少有 const。
  • 这个答案已经过时了。有转译器,比如babel,可以让你在普通浏览器中使用新的ES特性。
  • const is not for constants(如“常量值”)。它用于常量绑定
【解决方案2】:

如果你正在寻找一个只读变量,你可以用类似的东西来模拟它

var constants = new (function() {
    var x = 20;
    this.getX = function() { return x; };
})();

然后像使用它一样

constants.getX()

【讨论】:

  • 如果constants变量本身被修改了怎么办?
  • @BharatKhatri 如果有人在动态中重新定义您的对象,那么您做什么并不重要。
  • 常量的主要思想是让它的值只占用内存中的一个部分,以便更快地访问,而不是多次声明。这个解决方案离实现这一目标还很遥远
【解决方案3】:

解决方案是创建一个对象并将所有常量放入该对象中:

const={};

const.x=20;

const.y=30;

Object.freeze(const);  // finally freeze the object

用法:

var z=const.x + const.y;

任何修改变量的尝试都会产生错误:

const.x=100;  <== raises error

【讨论】:

    【解决方案4】:

    ECMAScript 中没有const(不考虑死掉的 4.0 版本和 ActionScript)。

    const 可在 JScript.NET 中找到,还有一些 recent versions of JS engines,例如Firefox、Opera 9、Safari 作为供应商特定的扩展。

    【讨论】:

    • 嗯,我不确定 Jscript.net 是什么。可以和jquery和东西一起使用吗?
    • @chobo2:JScript 是微软的 Javascript 版本(我认为是商标问题)。 JScript.NET 是 .NET 框架的 JScript 扩展,类似于 C# 和 VB.NET。我不认为你可以使用 jQuery,因为 JScript.NET 在浏览器上永远不可用。
    • const 也可用于 Mozilla 实现(Rhino、SpiderMonkey)
    • @CMS:嗯,对。已更新。
    • @CMS 我需要我的网站在所有浏览器上运行。那么其他浏览器也实现了吗?
    【解决方案5】:

    JavaScript ES6(重新)引入了const keywordall major browsers 支持它。

    通过const 声明的变量不能重新声明或重新分配。

    除此之外,const 的行为类似于 let

    它的行为与原始数据类型(布尔、空、未定义、数字、字符串、符号)一样:

    const x = 1;
    x = 2;
    console.log(x); // 1 ...as expected, re-assigning fails
    

    注意:注意有关对象的陷阱:

    const o = {x: 1};
    o = {x: 2};
    console.log(o); // {x: 1} ...as expected, re-assigning fails
    
    o.x = 2;
    console.log(o); // {x: 2} !!! const does not make objects immutable!
    
    const a = [];
    a = [1];
    console.log(a); // 1 ...as expected, re-assigning fails
    
    a.push(1);
    console.log(a); // [1] !!! const does not make objects immutable
    

    【讨论】:

      【解决方案6】:

      我相信有些东西不是 var ,是一个全局变量....js中没有 const 。

      var a="test"a="test" 不同

      【讨论】:

        【解决方案7】:

        不,JavaScript 中没有数据类型“const”。

        JavaScript 是一种松散类型的语言。每种变量都用 var

        声明

        【讨论】:

        • 打字的松散性与绑定的稳定性有点正交,你不觉得吗?
        • 确实如此。我的意思是 JavaScript 中没有特殊的数据类型(int、string、const)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 2013-10-13
        • 1970-01-01
        • 2019-12-13
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        相关资源
        最近更新 更多