2014-12-09 2 views
0

Я нашел эту функцию, чтобы поместить числа во фракции, и я пытаюсь выяснить, что все значит. Есть одна вещь, которую я не могу понять.Если оператор с номером только в Javascript

Вот код:

function reduce(numerator,denominator) { 
    var gcd = function gcd (a,b) { 
    if (b) { 
     return gcd(b, a%b); 
    } else { 
     return a; 
    } 
    }; 
    gcd = gcd(numerator,denominator); 
    return [numerator/gcd, denominator/gcd]; 
} 

Что делает if (b) значит. Я знаю, что если в инструкции if есть только переменная, она проверяет, является ли переменная истиной или ложью. Как это относится к числу? Когда это произойдет с выражением else?

+0

http://stackoverflow.com/questions/7615214/in-javascript-why-is-0-equal-to-false-but-not-false-by-itself – epascarello

ответ

7

Это делать с тем, как вещи преобразуются в Boolean, то есть ли что-то truthy или не

if (0 || NaN || undefined) {    // these are "falsy" 
    // this never happens 
} else if (1 /* or any other number*/){ // these are "truthy" 
    // this happens 
} 
+0

Может быть более кратким писать 'x! = 0' является правдой (отрицательной или положительной) –

+0

@BradChristie 'NaN! = 0; // true' –

0

Любое выражение в выражении if будет неявно преобразовано в boolean перед оценкой.

В коде, который вы отправили, он обычно используется для проверки того, прошел ли параметр, и в этом случае undefined является значением фальшивки и будет преобразовано в false. AJPerez дал ответ на фальшивые значения (за исключением того, что он забыл NaN).

function reduce(numerator,denominator){ 
    var gcd = function gcd(a,b){ 
    if (b) { 
     // if two arguments are passed, do something 
     return gcd(b, a%b); 
    } 
    else { 
     // only one argument passed, return it directly 
     return a; 
    } 
    }; 
    gcd = gcd(numerator,denominator); 
    return [numerator/gcd, denominator/gcd]; 
} 

Однако этот подход может быть ошибочным, если аргумент, который вы проверяете, действительно передается с помощью фальшивки.

0

В JavaScript вы можете проверить, если переменной присваивается, поставив его в случае заявление. Если оно имеет значение, оно будет истинным (ну, если его значение не будет ложным или 0). Если он не имеет значения или имеет значение null, он вернет false. Похоже, они проверяют, что он имеет значение, прежде чем передавать его в функцию.

2

Если b является:

  • 0
  • null
  • undefined
  • NaN
  • Или пустая строка ""

будет оцениваться как false. В противном случае он будет оценен как истинный.

+2

не забудьте 'NaN': D – Leo

+0

и' false' :-) –

+0

Добавлено NaN. Я тоже думал о том, чтобы добавить ложь, но ... :) – AJPerez

Смежные вопросы