Короткий ответ:
Нет , они не одинаковы.
Но это:
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