Короткий ответ:
Нет , они не одинаковы.
Но это:
if (!fields) {
...
}
Это так же, как это:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) {
...
}
Длинный (и лучший) ответ:
Давайте сначала поговорим о правдивых и ложных ценностях.
Это все о том, что происходит, когда вы оцениваете что-то как логическое значение. В JavaScript это происходит, когда вы используете такие вещи, как ifоператоры; Логические операторы любят ||, !или &&; или Boolean()функция.
Boolean()Функция принимает значение и возвращает либо trueили false.
Например:
var age = 1; // Let's evaluate age as a boolean
Boolean(age); // true
Попробуйте и попробуйте это в узле repl.
Логическое значение может быть только trueили false, поэтому возвращаемое значение Boolean() должно быть либо либо, trueлибо false. В этом случае мы передали значение 1, и при оценке как логическое значение 1равно true.
Важное замечание: При оценке как логического значения значение должно быть либо истинным, либо ложным. Это только два варианта.
В JavaScript есть только 6 ложных значений. Значения, которые будут falseпри оценке как логические. Они являются: false, 0, "", null, undefined, и NaN. Поэтому, если любое из этих значений будет оценено как логическое, они будут ложными:
Boolean(false) // false
Boolean(0) // false
Boolean("") // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(NaN) // false
Это означает, что любое другое значение в JavaScript будет trueоцениваться как логическое значение. Таким образом, все остальные значения в JavaScript правдивы.
Другой простой способ оценить что-либо как booleanесть с помощью !оператора. Как и Booleanфункция, она оценивает значение как логическое значение. Но истинные ценности становятся falseи ложные становятся true.
!false // true
!0 // true
!"" / true
!null // true
!undefined // true
!NaN // true
Опять же, попробуйте это в узле repl или что-то, чтобы убедиться, что вы понимаете.
Итак, это утверждение:
if (!fields) {
...
}
Говорит следующее: «если fields, когда вычисляется как логическое значение, ложно, тогда запустите код внутри этого оператора if».
Что касается вашего первого заявления:
var fields = options.fields || ['id', 'query'];
Вы работаете с логическим оператором ИЛИ, о котором стоит прочитать, чтобы убедиться, что вы понимаете. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators