Ajouter/modifier des propriétés à un objet et le renvoyer dans la même ligne est un cas d'utilisation possible :
console.log(
((x) => (o = {biggerCond: r => r >= x},
o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
o.isAnyBigger = o.r5.some(o.biggerCond),
o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
)(5e4)
);
// Example
// {
// bigger: [58414, 56500, 63397],
// isAnyBigger: true,
// isBiggerCond: r => r >= x,
// r5: [58414, 12015, 56500, 63397, 43861]
// }
La fonction anonyme ci-dessus renvoie un objet avec des valeurs aléatoires plus grandes que la valeur d'entrée ou, s'il n'y en a pas, avec la valeur d'entrée elle-même dans un tableau contenu dans le fichier bigger
propriété.
Il s'agit encore de sucre syntaxique (comme le fonctions de la flèche ), mais cela permet de réduire le nombre de lignes... Je me demande si certains minifieurs JS détectent et ajustent le code de manière similaire automatiquement. Exécutez-le dans votre console :
((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)
3 votes
Je suis surpris que le 09 n'échoue pas en raison d'un '9' illégal dans l'alphabet octal.
9 votes
@recursive - tout 9 dans la représentation octale entraîne un retour en décimal.
0 votes
Ne confondez pas la virgule avec une liste d'arguments.
alert
ne prend qu'un seul argument. Tout ce qui suit est écarté.0 votes
@Andrew : oui, est écarté par alert(), qui ne prend qu'un seul argument, mais il sera exécuté ! C'est bizarre. Merci.
1 votes
@Topera : ce n'est pas vraiment bizarre si on y pense du point de vue de JS. En JS, vous n'avez pas besoin de spécifier votre liste d'arguments dans votre déclaration de fonction (vous pouvez utiliser la fonction
arguments
à la place, qui peut être de n'importe quelle longueur). Même avec le JS compilé moderne, il n'y aurait aucun moyen de savoir à l'avance combien d'arguments une fonction prendrait. Considérez ceci :function test() { args=[]; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i] + 1); } ;
L'interprète devrait savoir comment la fonction est utilisée pour savoir combien d'arguments elle prend. Au lieu de cela, il évalue tout.