【问题标题】:What is a principle behind designing const variable in javascript?在 javascript 中设计 const 变量背后的原则是什么?
【发布时间】:2020-02-02 15:36:48
【问题描述】:

我想知道javascript中const变量的原理。

我知道 const 是平均常量变量。这意味着const a = 1 和 a 将无法重新分配值。但是,如果我将一个对象分配给const 变量(const a = { x: 1}),我仍然可以更新对象内部字段的值,但不能重新分配对象。因为,将 object 分配给 const 是将 object 的引用分配给变量,而不是变量中的值。

但是,如果我告诉对编码一无所知的人,const 无法重新分配变量。我想他们可能明白const a = { x: 1 }a.x = 2 应该失败。

所以,我想知道设计const 变量背后的抽象概念是什么。为什么首先,他们认为const 仅适用于参考,而不适用于其中的价值。

附:抱歉我的英语语法不好。我不是母语人士。

【问题讨论】:

  • 您可能想了解Object.freezeObject.sealObject.preventExtensions 属性
  • 所以你期望分配给它的对象应该是不可变的。看到这个:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • a.x 不是a,所以a.x = 2 很好。正如您所说,const 是一种变量,而不是对象属性。
  • const 声明创建一个对值的只读引用。这并不意味着它持有的值是不可变的,只是不能重新分配变量标识符。例如,在内容是对象的情况下,这意味着可以更改对象的内容(例如,它的属性)。

标签: javascript object variables constants


【解决方案1】:

也许对const 存在误解,实际上它不会创建不可变变量而是创建不可变绑定。

示例:

 const myconst = YourObjectInstance;
 myonst  = AnotherInstanceOfObject // we will have an error here

另一方面:

 myconst.myProperty = 3 // will work fine because is a valid code

所以const 创建一个到那个特定对象的绑定,并确保变量myconst 不会有任何其他对象的绑定。

【讨论】:

    【解决方案2】:

    第一 - 没有什么叫做“常量变量”。正确的术语是“常量”。

    你声明为常量的对象的属性之所以可以改变,是因为对象被引用了。

    var i = 200;
    const c = 300;
    const o = {foo: "bar"}
    

    现在,在上面的例子中,

    符号i 可以理解为一个值为 200 的变量。

    符号c是一个常数,其值固定为300。

    符号o 是一个常量,它指向一个对象。 o 的值是一个内存地址,它指向一个对象。不能改变的是这个内存地址,而不是地址本身。

    const o = {foo: "bar"};
    
    
    o.bar = "foo";   //The object properties, whats in the memory location the constant points to, can be changed
    console.log(o);
    
    
    try {
       o = {bar: "foo"}       
       console.log('I changed the value of a constant')
    }
    catch(e) {
        console.log('I cannot change the value of a constant. But whatever in the memory where the value is pointing to')
    }

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2018-08-31
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2012-09-01
      • 2010-11-23
      相关资源
      最近更新 更多