为什么这段代码会返回它所做的结果

时间:2017-10-23 20:07:39

标签: javascript

当我在节点中运行它时,我得到以下结果。为什么呢?

//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

3 个答案:

答案 0 :(得分:1)

JavaScript中的==运算符在检查相等性之前将其操作数转换为公共类型(这就是为什么建议始终使用===运算符,这取决于类型)。 在您的情况下,公共类型是number,因此每个给定的数组都会转换为数字。对于单个元素数组,转换为数字会产生单个元素(转换为数字)。

参数[2]等于数字2,因此返回false。 另一方面,[3]既不等于0,1或2,所以返回true

有关更多示例,另请参阅https://www.w3schools.com/js/js_type_conversion.asp

答案 1 :(得分:0)

==松散地比较股权。

引用developer.mozilla.org

  

在将两个值都转换为公共类型之后,松散相等性将两个值相等。

这意味着[2] == 2true,这也意味着"2" == 2true

这就是为什么经常建议使用严格的相等性,以便[2] === 2false,除非你真的在寻找转换。

答案 2 :(得分:0)

当你将[2]和[3]传递给函数时,要捎带Mark_M所说的,它将它们视为对象文字而不是数字。然后在你的函数调用它的类型转换为比较。



console.log(typeof(1));
console.log(typeof[2]);
console.log(typeof[3]);