"this.data = this.data || {}" 在记忆模式中意味着什么?
What "this.data = this.data || {}" means in Memoization pattern?
我是学习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
数组和空白数组之间的操作,我不明白为什么需要这样的代码。
这确保 this.data 在未定义的情况下具有值。当 this.data
为 undefined
或 null
时,this.data || {}
表达式变为 undefined || {}
(或 null || {}
),计算结果为 {}
用于设置默认值。如果给定对象没有分配给键 data
、this.data
returns undefined
值的值。 undefined
值容易导致意外行为和错误。所以我们需要为 data
设置默认值。在本例中,它是一个空对象 {}
。如果您熟悉 PHP
(v 7.0 或更高版本),它类似于 ??
表示法。
JavaScript 中的 ||
运算符也可用于条件评估,因为它 "short circuits"。如果运算符左侧的计算结果为真,则无需检查右侧。
解释器计算运算符的左侧,如果计算结果不同于 false 或 null,则 returns 计算结果,否则计算并返回右侧。
let x = 1 || 2;
// Prints 1
print(x);
let y = null || 3;
// Prints 3
print(y);
在您的示例中:如果 this.data
中有内容,则相同的信息将存储在 this.data
中,否则将分配一个空对象。
我是学习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
数组和空白数组之间的操作,我不明白为什么需要这样的代码。
这确保 this.data 在未定义的情况下具有值。当 this.data
为 undefined
或 null
时,this.data || {}
表达式变为 undefined || {}
(或 null || {}
),计算结果为 {}
用于设置默认值。如果给定对象没有分配给键 data
、this.data
returns undefined
值的值。 undefined
值容易导致意外行为和错误。所以我们需要为 data
设置默认值。在本例中,它是一个空对象 {}
。如果您熟悉 PHP
(v 7.0 或更高版本),它类似于 ??
表示法。
JavaScript 中的 ||
运算符也可用于条件评估,因为它 "short circuits"。如果运算符左侧的计算结果为真,则无需检查右侧。
解释器计算运算符的左侧,如果计算结果不同于 false 或 null,则 returns 计算结果,否则计算并返回右侧。
let x = 1 || 2;
// Prints 1
print(x);
let y = null || 3;
// Prints 3
print(y);
在您的示例中:如果 this.data
中有内容,则相同的信息将存储在 this.data
中,否则将分配一个空对象。