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 ifinstruções; operadores lógicos gosta ||, !ou &&; ou a Boolean()função.
A Boolean()função aceita um valor e retorna trueou 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 trueor false, portanto o valor de retorno de Boolean() deve ser trueou false. Nesse caso, passamos o valor 1e, 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 falsequando 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á truequando avaliado como um booleano. Portanto, todos os outros valores no JavaScript são verdadeiros.
Outra maneira fácil de avaliar algo como booleanestá usando o !operador. Assim como a Booleanfunção, isso avalia um valor como booleano. Mas valores falseverdadeiros 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