当我在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
请探索更多关于分配和比较运算符的信息
- =用于为任何变量赋值
- ==用于检查两个值是否相等
- 并且===还将检查这些值及其数据类型
对于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完成