为什么在使用JavaScript的条件(三元)运算符时,使用"="和"==="会得到不同的结果?
为什么在使用JavaScript的条件(三元)运算符时,使用"="和"==="会得到不同的结果?
我想用JavaScript编写一个程序,当两个整数相等时返回\"true\",不相等时返回\"false\"。\n我尝试过使用\"=\"和\"===\"符号,但是我不知道为什么程序的结果会根据使用的符号而改变,即使函数中的数字没有改变。\n这段代码的结果是\"false\",这正是我想要的:\n
function checkEqual(a, b) { return (a === b ? true : false ); } checkEqual(1, 2);
\n这段代码的结果是\"true\",这不是我想要的:\n
function checkEqual(a, b) { return (a = b ? true : false ); } checkEqual(1, 2);
\n在checkEqual()中的数字在两次尝试中是相同的,但我想知道为什么第二个结果是\"true\"。
在JavaScript中,使用条件(三元)运算符时,使用"="和"==="会得到不同的结果。下面我们来解析一下问题出现的原因以及解决方法:
首先,我们看第一个例子,使用"==="运算符:
function checkEqual(a, b) { return (a === b ? true : false ); } checkEqual(1, 2);
这里使用了恒等运算符(也被称为严格相等运算符)。它检查值是否相等(且类型相同)。
由于a是1,b是2,所以a === b的结果是false(因为它们不相等)。当然,false ? true : false的结果是false。因此,整个表达式返回false。你也可以简化为以下形式:
function checkEqual(a, b) { return a === b; } checkEqual(1, 2);
接下来,我们看第二个例子,使用"="运算符:
function checkEqual(a, b) { return (a = b ? true : false ); } checkEqual(1, 2);
这里使用的是赋值运算符,而不是等号或恒等号。
在这种情况下,a = b将b的值赋给a并返回。因此,a和b都将变成2,而a = b的结果是2。最后,由于2是一个真值,2 ? true : false的结果是true。
需要注意的是,如果将一个假值传递给b,将会得到false的结果。例如调用checkEqual(1, null);。传递给a的值是无关紧要的。
最后,我们来看你没有使用的情况,使用"=="运算符:
function checkEqual(a, b) { return (a == b ? true : false ); } checkEqual(1, 2);
这里使用的是等号运算符。它检查值是否相等(但它可以自由地转换值来进行比较)。
与第一个例子类似,这也会返回false。不同之处在于类型。在JavaScript中,"1" == 1的结果是true,但"1" === 1的结果是false。也就是说,使用"=="运算符允许运行时将值转换为比较,但使用"==="运算符则不允许。
可以参考以下链接了解更多相关信息:
- [JavaScript comparison operators: Identity vs. Equality](https://stackoverflow.com/q/5447024/402022)
- [Which equals operator (== vs ===) should be used in JavaScript comparisons?](https://stackoverflow.com/q/359494/402022)
在JavaScript中,赋值运算符=
并不用于检查相等性,它仅用于赋值。用于检查相等性的运算符是==
(用于"抽象"相等性)和===
(用于"严格"相等性)。如果a
和b
都是数字,==
和===
将得到相同的结果。同样,!=
和!==
也是如此。
然而,在使用条件(三元)运算符时,=
和===
可能会导致不同的结果。这是因为条件(三元)运算符根据条件的真假返回不同的值。当条件为真时,返回第一个表达式的值;当条件为假时,返回第二个表达式的值。
问题出现的原因是,=
只是一个赋值运算符,它会将第一个表达式的值赋给变量,而不会比较两个表达式的相等性。因此,在使用条件(三元)运算符时,如果使用=
来检查相等性,实际上是将第一个表达式的值赋给变量,而不是根据相等性进行比较。
解决这个问题的方法是使用正确的相等性运算符:===
。这个运算符会比较两个表达式的值和类型是否相等。因此,当使用===
来检查相等性时,条件(三元)运算符将根据表达式的相等性返回正确的结果。
下面是使用=
和===
的条件(三元)运算符的示例代码:
var a = 5; var b = 5; var result1 = (a == b) ? "Equal" : "Not equal"; var result2 = (a === b) ? "Equal" : "Not equal"; console.log(result1); // Output: Equal console.log(result2); // Output: Equal
在这个示例中,a
和b
都是数字,并且它们的值和类型都相等。因此,无论使用=
还是===
,条件(三元)运算符都会返回"Equal"。
总结起来,=
用于赋值,==
用于"抽象"相等性比较,===
用于"严格"相等性比较。在使用条件(三元)运算符时,应该使用正确的相等性运算符来检查相等性,以获得正确的结果。
在JavaScript中,使用条件(三元)运算符时,使用"="和"==="会得到不同的结果。这个问题的出现原因是你使用了赋值运算符"="来赋值给变量a一个值b,因此a变为了true。而你想要做的是使用相等运算符"=="来进行比较。
"="是赋值运算符。
"=="是相等运算符。
"==="是严格相等运算符。
你可以查看文档进行深入了解。
解决这个问题的方法是使用相等运算符"=="而不是赋值运算符"="来比较两个值。这样就可以得到正确的结果。