Si n et guard n'existent pas, n==null est vrai Dans l'opérateur ternaire, guard n'est pas défini Si la valeur booléenne est convertie en faux, elle sera égale à n, c'est-à-dire qu'undéfini est finalement renvoyé. .
Mais pourquoi renvoie-t-il 1 ?
var test=function(array,n,guard){
return (n==null || guard ? 1 : n);
};
console.log(test([]));//1
Tout d’abord, vous avez mal compris l’ordre des opérations
La priorité des opérations de|| (OU logique) est supérieure à celle de l'opérateur ternaire
Donc (n==null || guard ? 1 : n) ici calcule d'abord le OU logique, puis calcule l'opérateur ternaire
Ici, cela devient
.true ? 1 : n
Donc sortie n
Ci-joint une photo de la priorité des opérations, je ne me souviens plus de quel livre je l'ai tirée
||La priorité est supérieure à trinoculaire, donc c'est (vrai || garde) ? : n ===>