Resposta curta:
Não , eles não são os mesmos.
Mas isso:
if (!fields) {
...
}
É o mesmo que isto:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) {
...
}
Resposta longa (e melhor):
Vamos primeiro falar sobre valores de verdade e falsidade.
É tudo sobre o que acontece quando você avalia algo como um booleano. Em JavaScript, isso acontece quando você usa coisas como if
instruções; operadores lógicos gosta ||
, !
ou &&
; ou a Boolean()
função.
A Boolean()
função aceita um valor e retorna true
ou false
.
Por exemplo:
var age = 1; // Let's evaluate age as a boolean
Boolean(age); // true
Vá em frente e tente isso em uma substituição de nó.
Um booleano pode ser apenas true
or false
, portanto o valor de retorno de Boolean()
deve ser true
ou false
. Nesse caso, passamos o valor 1
e, quando avaliado como booleano, 1
é true
.
Importante: Quando avaliado como um booleano, um valor deve ser verdadeiro ou falso. Essas são as duas únicas opções.
Em JavaScript, existem apenas 6 valores de falsidade. Valores que serão false
quando avaliados como booleanos. Eles são: false
, 0
, ""
, null
, undefined
, e NaN
. Portanto, se algum desses valores for avaliado como booleano, eles serão falsos:
Boolean(false) // false
Boolean(0) // false
Boolean("") // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(NaN) // false
Isso significa que qualquer outro valor, em JavaScript, será true
quando avaliado como um booleano. Portanto, todos os outros valores no JavaScript são verdadeiros.
Outra maneira fácil de avaliar algo como boolean
está usando o !
operador. Assim como a Boolean
função, isso avalia um valor como booleano. Mas valores false
verdadeiros se tornam e valores falsificados se tornam true
.
!false // true
!0 // true
!"" / true
!null // true
!undefined // true
!NaN // true
Novamente, tente isso em uma substituição de nó ou algo assim para garantir que você entenda.
Portanto, esta declaração:
if (!fields) {
...
}
Está dizendo o seguinte: "se fields
, quando avaliado como booleano, for falso, execute o código dentro desta instrução if".
Quanto à sua primeira declaração:
var fields = options.fields || ['id', 'query'];
Você está trabalhando com o operador OR lógico, que vale a pena ler, para garantir que você entenda. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators