记忆模式中的“ this.data = this.data || {}”是什么意思?

时间:2019-10-11 03:50:17

标签: javascript memoization

我是一名学习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操作,我不明白为什么需要这样的代码。

3 个答案:

答案 0 :(得分:1)

如果未定义,则确保this.data具有值。当this.dataundefinednull时,this.data || {}表达式变为undefined || {}(或null || {}),其结果为{}

答案 1 :(得分:1)

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

答案 2 :(得分: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中,否则将分配一个空对象。