请有人可以解释一下这段简短而有趣的javascript代码

时间:2019-06-14 11:28:12

标签: javascript if-statement

var x=1

if(x){
  x=0;
}
if(x){
  x=1
};
alert(x);

我无法理解为什么它是0。

7 个答案:

答案 0 :(得分:6)

使用

var x=1

x开始是真实的。这意味着第一个if已实现:

if(x){x=0;}                                                                                                                 

使x为假(0),因此第二个if无法运行

if(x){

因此,最后,x0

答案 1 :(得分:2)

您正在寻找的是Java中的“强制”。 当我们在需要其他类型变量的场所/功能/条件等中使用一种类型的Javascript变量时,Javascript不会引发错误。而是将变量的值更改为该特定类型的变量。它称为强制。

例如:

var a = "" ;
if (a){                     //a is coerced to false
  console.log (true);
}
else{
console.log (false);
}

在上面的代码中,空字符串被强制为false。

类似地,在您的代码中,发生了强制:

var x=1

if(x){      // x is coerced to true, this condition is met and x is set to 0.
  x=0;
}
if(x){     // since x is 0, it is coerced to false, so condition is not satisfied
  x=1
};
alert(x);

有关更多详细信息,请查看此link

答案 2 :(得分:1)

var x=1

if(x){ // x is 1 here condition success
  x=0; // so x is assigned as 0
}                                                                                                                                
if(x){ // so here x is 0 so condition fails
  x=1
};
alert(x); // then it alerts 0

答案 3 :(得分:1)

第一个x为真(1),因此运行第一个if语句,并将其设为0。这是虚假的,因此第二个if语句将被跳过,并警告x(0)的值。

答案 4 :(得分:1)

JavaScript中有6个伪造的值。

  • false
  • 0
  • “”,“,”(“字符串长度”
  • 未定义
  • NaN

console.log('Is truthy: ', isTruthy(false));
console.log('Is truthy: ', isTruthy(0));
console.log('Is truthy: ', isTruthy(undefined));
console.log('Is truthy: ', isTruthy(null));
console.log('Is truthy: ', isTruthy(NaN));
console.log('Is truthy: ', isTruthy(""));
console.log('Is truthy: ', isTruthy(''));
console.log('Is truthy: ', isTruthy(``));

function isTruthy(v) {
  if(v) {
    return true;
  } else {
    return false;
  }
}

有关更多信息,您可以参考此link

您的代码说明:

var x=1

if(x) { // x is 1 = truthy
  x=0; // x is now 0
}                                                                                                                                
if(x) { // x is 0 = falsy (as per above explanation)
  x=1
};
alert(x); // alert 0

希望这对您有所帮助。

答案 5 :(得分:1)

  1. 如果方括号内的值为if,则控制到达truthy语句内的逻辑。
  2. 所有值都是真实的,除非将它们定义为falsy
  3. 以上内容很好地解释了falsy值的不同类型。

最后,结果是0。

我认为那句话是什么样的。

if (x === 1) { // some code }

这会更有意义。只需考虑一下上面的代码为什么起作用,事情就会变得有意义。

答案 6 :(得分:1)

所以这是我对我所理解的解释。 在这里,我们将值1分配给变量x。

var x=1

接下来,我们正在检查x的值。

 if(x)
    {
      x=0;
    }

如果变量x为以下任一情况,则if(x)条件将为true:

  • 已分配并初始化
  • 不为空
  • 未定义
  • 不为空
  • 大于0
  • 是一个数字
  • true

所以x = 1,因此将值0分配给x。 现在,在下一个条件中,x将等于0。因此,该条件未断言为true。 x不会被赋值为1。 因此,您得到的警报为0。 我希望这是有道理的。