Пожалуйста, кто-нибудь может объяснить этот короткий и приятный код JavaScript - PullRequest
0 голосов
/ 14 июня 2019
var x=1

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

Не могу понять, почему это 0.

Ответы [ 7 ]

6 голосов
/ 14 июня 2019

С

var x=1

x начинается правдиво. Это означает, что первое if выполнено:

if(x){x=0;}                                                                                                                 

делает x falsey (0), поэтому второй if не запускается

if(x){

так, в конце x равно 0.

2 голосов
/ 14 июня 2019

То, что вы ищете, это «Принуждение» в Javascript. Когда мы используем один тип переменной 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);

Для получения более подробной информации, перейдите по ссылке .

1 голос
/ 14 июня 2019

Итак, вот мое объяснение, что я понял. Здесь мы присваиваем значение 1 переменной x.

var x=1

Далее мы проверяем значение x.

 if(x)
    {
      x=0;
    }

Здесь if(x) условие будет утверждено как истинное, если переменная x имеет значение:

  • назначено и инициализировано
  • не нуль
  • не определено
  • не пусто
  • больше 0
  • это число
  • правда

Итак, x = 1, следовательно, он присваивает значение 0 x. Теперь в следующем условии x будет равен 0. Таким образом, условие не утверждается как истинное. И х не будет присвоено значение 1. Следовательно, вы получите предупреждение как 0. Я надеюсь, что это имеет смысл.

1 голос
/ 14 июня 2019
  1. Управление достигает логики внутри оператора if, если значение в скобках равно truthy.
  2. Все значения достоверны, если они не определены как falsy.
  3. Люди выше прекрасно объяснили, каковы различные типы значений falsy.

Итак, в итоге получается 0.

Я думаю, что это утверждение было чем-то вроде.

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

это имело бы больше смысла. Просто нужно подумать, почему работает приведенный выше код, и все будет иметь смысл.

1 голос
/ 14 июня 2019

В JavaScript есть 6 ложных значений.

  • ложь
  • 0
  • "", '', `` (длина строки)
  • 1010 * нуль *
  • 1012 * не определено *
  • 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;
  }
}

Для получения дополнительной информации вы можете обратиться по этой ссылке .

Объяснение вашего кода:

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

Надеюсь, это поможет вам.

1 голос
/ 14 июня 2019

Первый x - это truey (1), поэтому первый оператор if выполняется, и он равен 0. Это ложное утверждение, поэтому второй оператор if пропускается, и значение x (0) оповещается.

1 голос
/ 14 июня 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...