Réponse courte:
Non , ce ne sont pas les mêmes.
Mais ça:
if (!fields) {
...
}
Est la même que celle-ci:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) {
...
}
Réponse longue (et meilleure):
Parlons d'abord des valeurs véridiques et fausses.
Tout dépend de ce qui se passe lorsque vous évaluez quelque chose en tant que booléen. En JavaScript, cela se produit lorsque vous utilisez des éléments tels que des ifinstructions; opérateurs logiques aiment ||, !ou &&; ou la Boolean()fonction.
La Boolean()fonction accepte une valeur et retourne soit trueou false.
Par exemple:
var age = 1; // Let's evaluate age as a boolean
Boolean(age); // true
Allez-y et essayez ceci dans un repl de noeud.
Un booléen ne peut être que trueou false, donc la valeur de retour de Boolean() doit être soit trueou false. Dans ce cas, nous avons transmis la valeur 1et, lorsqu'elle est évaluée comme booléenne, 1est true.
Important: lorsqu'elle est évaluée en tant que booléen, une valeur doit être vraie ou fausse. Ce sont les deux seules options.
En JavaScript, il n'y a que 6 valeurs de falsification. Valeurs qui seront falseévaluées comme booléennes. Ils sont: false, 0, "", null, undefinedet NaN. Donc, si l'une de ces valeurs est évaluée comme un booléen, elle sera fausse:
Boolean(false) // false
Boolean(0) // false
Boolean("") // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(NaN) // false
Cela signifie que toute autre valeur, en JavaScript, sera trueévaluée en tant que booléen. Donc, toutes les autres valeurs de JavaScript sont véridiques.
Un autre moyen simple d'évaluer quelque chose en tant que tel booleanest d'utiliser l' !opérateur. Tout comme la Booleanfonction, cela évalue une valeur en tant que booléen. Mais les valeurs véridiques deviennent falseet les valeurs fausses deviennent true.
!false // true
!0 // true
!"" / true
!null // true
!undefined // true
!NaN // true
Encore une fois, essayez ceci dans un nœud repl ou quelque chose pour vous assurer que vous comprenez.
Donc, cette déclaration:
if (!fields) {
...
}
Dit ce qui suit: "si fields, lorsqu'il est évalué en tant que booléen, est faux, exécutez le code à l'intérieur de cette instruction if."
Quant à votre première déclaration:
var fields = options.fields || ['id', 'query'];
Vous travaillez avec l'opérateur logique OU, ce qui vaut la peine d'être lu pour vous assurer que vous comprenez. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators