当我在节点中运行它时,我得到以下结果。为什么呢?
//Why does this code return the results that it does?
function isBig(thing) {
if (thing == 0 || thing == 1 || thing == 2) {
return false
}
return true
}
isBig(1) // false
isBig([2]) // false
isBig([3]) // true
答案 0 :(得分:1)
JavaScript中的==
运算符在检查相等性之前将其操作数转换为公共类型(这就是为什么建议始终使用===
运算符,这取决于类型)。
在您的情况下,公共类型是number
,因此每个给定的数组都会转换为数字。对于单个元素数组,转换为数字会产生单个元素(转换为数字)。
参数[2]
等于数字2,因此返回false
。
另一方面,[3]
既不等于0,1或2,所以返回true
。
有关更多示例,另请参阅https://www.w3schools.com/js/js_type_conversion.asp。
答案 1 :(得分:0)
==
松散地比较股权。
在将两个值都转换为公共类型之后,松散相等性将两个值相等。
这意味着[2] == 2
为true
,这也意味着"2" == 2
为true
这就是为什么经常建议使用严格的相等性,以便[2] === 2
为false
,除非你真的在寻找转换。
答案 2 :(得分:0)
当你将[2]和[3]传递给函数时,要捎带Mark_M所说的,它将它们视为对象文字而不是数字。然后在你的函数调用它的类型转换为比较。
console.log(typeof(1));
console.log(typeof[2]);
console.log(typeof[3]);