【问题标题】:Define an array with const-like thing in JS在 JS 中定义一个类似 const 的数组
【发布时间】:2012-12-14 11:28:44
【问题描述】:

我想做这样的事情(c++):

const int SIZE = 5;
int array[SIZE];

但是在 JS 中。我多次使用SIZE 值(对于许多数组以及稍后在代码中),并且我不想将许多文字放入相同的值(以防我以后必须编辑它)。我在某处读到 JS 中有一个 const 关键字,但它不适用于每个浏览器(不确定这是否属实,但我想要一个通用的解决方案)。越短/越简单越好! ;)

【问题讨论】:

    标签: javascript arrays constants


    【解决方案1】:

    const 关键字实际上是非标准的,并且仅由 Mozilla 实现因此不能保证跨浏览器工作(但显然有些浏览器实现了它,请参阅 Bergi 答案上的链接) .只需使用常规变量,大写名称表示它应该是一个常量:

    var SIZE = 5;
    var arr = new Array(SIZE);
    

    注意:如果您向Array 构造函数传递除数字以外的任何内容,它将使用length 和您在索引0 处传递的值创建一个数组。在这种情况下,最好只使用文字符号 (var arr = ['foo'])。另外请记住,当您将数字传递给构造函数时,您只是设置了初始 length,之后始终可以添加或删除元素。

    【讨论】:

    • 当然......我猜JS中的所有数组都是动态的?这意味着我总是可以使用变量(而不是 const)并且数组将毫无问题地创建? :P
    • 没错。实际上,您传递给构造函数的值只是初始长度,之后您可以随时添加/删除元素。
    【解决方案2】:

    你可以分配一个

    var arr = new Array(5);
    

    它用5length 属性初始化一个数组,但没有值(稀疏数组)。

    不可能像在 C++ 中那样声明变量类型,因为 JS 是 loose typed 语言,也没有固定长度的数组 - Arrays 更像是列表。对于const 关键字,请查看this question

    【讨论】:

      【解决方案3】:
      Object.defineProperty(window, PI, {
          configurable: false,
          writeable: false,
          value: 3.1415
      });
      
      console.log(PI); // 3.1415
      
      /* if 'use strict', the acts below would throw error */
      
      PI = 0; // nothing happened
      
      window.PI = 0; // nothing happened
      
      delete window.PI;  // nothing happened
      
      Object.defineProperty(window, PI, {
          configurable: true,
          writeable: true,
          value: 0
      }); // nothing happened
      
      console.log(PI); // 3.1415
      

      数组或对象也可以用 'const' 定义其属性

      Object.defineProperties
      

      但最快的方法是

      Object.freeze(obj_name)
      

      但你必须确保对象本身是一个“常量”,然后它的属性才是真正安全的

      【讨论】:

        猜你喜欢
        • 2020-08-14
        • 2012-04-28
        • 2018-11-14
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        相关资源
        最近更新 更多