【问题标题】:What "this.data = this.data || {}" means in Memoization pattern?“this.data = this.data || {}”在记忆模式中是什么意思?
【发布时间】:2019-10-11 03:50:17
【问题描述】:

我是一名学习javascript的学生,在学习memoization模式时遇到了问题。这是代码:

Function.prototype.memoization = function(key) {
   var arg = Array.prorotype.slice.call( arguments, 1 );
   this.data = this.data || {} ;    //THE code

   return this.data[key] !== undefined ?
       this.data[key] : this.data[key] = this.apply(this, arg);
};

对我来说,它显示为数组和空白数组之间的 OR 操作,我不明白为什么需要这样的代码。

【问题讨论】:

  • 下面发布的答案通常是正确的。我唯一要补充的是,它被用作一种简写形式来代替更冗长的if 声明:if (!this.data) { this.data = {}; }

标签: javascript memoization


【解决方案1】:

JavaScript 中的|| 运算符也可用于条件评估,因为它“短路”。如果运算符的左侧计算结果为 true,则无需检查右侧。

解释器计算运算符的左侧,如果计算结果不同于 false 或 null,则返回结果,否则计算并返回右侧。

let x = 1 || 2;
// Prints 1
print(x);

let y = null || 3;
// Prints 3
print(y);

在您的示例中:如果this.data 中有内容,那么相同的信息将存储在this.data 中,否则分配一个空对象。

【讨论】:

  • 除了 false 和 null 之外还有其他的 falsy 值,比如 0 和空字符串,它们也会被评估为 false。
【解决方案2】:

如果 this.data 没有定义,这可以确保它有一个值。当this.dataundefinednull 时,this.data || {} 表达式变为undefined || {}(或null || {}),其计算结果为{}

【讨论】:

    【解决方案3】:

    用于设置默认值。如果给定对象没有分配给键data 的值,则this.data 返回undefined 值。 undefined 值容易导致意外行为和错误。所以我们需要为data设置默认值。在这种情况下,它是一个空对象{}。如果您熟悉PHP(v 7.0 或更高版本),它类似于?? 表示法。

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2019-12-18
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多