为什么在我的 if 语句中使用 '=' 返回未定义?



当我在if语句中使用'='时,我得到了未定义的结果,但当我使用'==='时,我会得到预期的结果。有人能解释一下那里发生了什么吗?

function once(callback) {
let counter = 0;
let result;
function sum(x) {
if (counter === 0) {
result = callback(x);
counter++;
}
return result;
}
return sum;
}
const addByTwoOnce = once(function(num) {
return num + 2;
});
// UNCOMMENT THESE TO TEST YOUR WORK!
console.log(addByTwoOnce(5));  //should log 7
console.log(addByTwoOnce(10));  //should log 7
console.log(addByTwoOnce(9001));  //should log 7

'='表示您正在为变量赋值。

if(count = 0)

意味着计数值变为0。

'==='或'==='表示检查值。

if(count == 0)

检查计数是否为0。

if(count === 0) // Strict equality comparison which means checks types also

检查计数为0,并且检查两种类型是否相等。

=是赋值运算符

===是一个严格相等比较算子

所以,如果您对条件使用=,它会将值分配给变量。

if (counter = 0) { // counter value is 0
result = callback(x);
counter++;
}

这可能会在严格模式中引发错误

预期有条件,但发现分配

=用于设置值,===用于严格比较值。

本文很好地解释了=====之间的差异:https://bytearcher.com/articles/equality-comparison-operator-javascript/

一个=仅用于分配值,例如var x = 2;

单个'='表示将RHS值分配给LHS

双或3'==='表示您正在比较LHS和RHS

请探索更多关于分配和比较运算符的信息

  1. =用于为任何变量赋值
  2. ==用于检查两个值是否相等
  3. 并且===还将检查这些值及其数据类型

对于EX:-

浮点A=1,int B=1

如果(A==B(//真

但是如果(A==B(//错误,因为A和B有不同的数据类型

=用于赋值,而==&===用于比较两侧

BONUS:==用于比较LHS==RHS时的条件CCD_ 15不仅比较了LHS&RHS但也要检查LHS和RHS应该具有相同的数据类型"int:int"、"string:string"、"float:foat",然后仅LHS&RHS完成

最新更新