使用Strict Equal在Javascript中无法进行比较

时间:2018-02-17 14:02:27

标签: javascript

我使用以下基本Javascript来反转使用

时工作的数字
  

while (!no == 0)

但是当我使用

时,它不起作用
  

while (!no === 0)

我在parseInt(0)的控制台中尝试过只返回number而我的no已经number所以

  

为什么===无效,有人可以帮助并更好地解释我吗?



function findRepeated(number) {
  var a, no, b, temp = 0;

  no = parseInt(number);


  while (!no == 0) {
    a = no % 10;
    no = parseInt(no / 10);
    temp = temp * 10 + a;
  }
  return temp;
}

console.log(findRepeated(123));




2 个答案:

答案 0 :(得分:8)

!no == 0!(no == 0)不同。它是(!n) == 0

类似,!no === 0(!no) === 0 此值始终为false,因为!noboolean0为数字。
不同类型的值永远不会是===

了解logical NOT operatorcomparison operatorsoperator precedence

答案 1 :(得分:4)

类型

!no返回一个布尔值,它返回false,虽然no的值是一个数字,在任何数字前添加negate运算符将返回false,即console.log(!123 === false)。您可能已经注意到,使用==会为您转换数据类型,而使用===则不会。

实施例

我喜欢null和undefined的例子。 虽然null == undefined为真,但null === undefined为假,因为值null是一种对象,而undefined的类型当然是未定义的。

console.log("test1: " + !123); // false
console.log("test2: " + (!123 === false)); // true
console.log("test3: " + (!123 == 0)); // true
console.log("test4: " + (!123 === 0)); // false

console.log("test5: " + (0 == false)); // true
console.log("test6: " + (0 === false)); // false
console.log("test7: " + (null == undefined)); // true
console.log("test8: " + (null === undefined)); // false

console.log("test9: " + typeof null); // object
console.log("test10: " + typeof undefined); // undefined