Voici quelques perles :
Les littéraux :
var obj = {}; // Object literal, equivalent to var obj = new Object();
var arr = []; // Array literal, equivalent to var arr = new Array();
var regex = /something/; // Regular expression literal, equivalent to var regex = new RegExp('something');
Par défaut :
arg = arg || 'default'; // if arg evaluates to false, use 'default', which is the same as:
arg = !!arg ? arg : 'default';
Bien sûr, nous connaissons les fonctions anonymes, mais pouvoir les traiter comme des littéraux et les exécuter sur place (comme une fermeture) est formidable :
(function() { ... })(); // Creates an anonymous function and executes it
Question : Quel autre sucre syntaxique génial est disponible en javascript ?
2 votes
Je n'étais pas au courant de cette syntaxe de valeur par défaut ||. Sympathique et compacte, mais pas si intuitive. (Peut-être que je ont Je l'ai vu, mais je ne l'ai jamais compris.)
1 votes
J'ai eu beaucoup plus de mal à comprendre la syntaxe ternaire. Elle deviendra une seconde nature après l'avoir écrite plusieurs fois. En ce qui concerne les endroits où vous avez pu la voir, je pense que jquery.js et prototype.js l'utilisent tous les deux.
1 votes
Et si vous expliquiez chacun de ces exemples ?
2 votes
Je ne savais pas pour "arg || 'default'". Je m'attendais à ce qu'il renvoie une valeur booléenne, mais il renvoie la première valeur (à partir de la gauche) qui évalue à true (similaire à python) ! C'est bien mieux que "arg = arg ? arg : 'default'" !
0 votes
Chris Noe a mis ce fil en gage !
0 votes
Vous devriez ajouter au (function(){})() ; qu'il est principalement utilisé pour les bookmarklets, afin que le navigateur ne redirige pas vers le résultat de l'expression lsat.
0 votes
El
arg || 'default'
La syntaxe est aussi un peu (15%) plus rapide, j'ai ajouté un benchmark rapide ici : jsperf.com/conditionnels booléens-vs-ternaires0 votes
Arg || 'default' ne fonctionne pas si vous voulez un arg 'falsy' d'un type particulier. arg === undefined ? default : arg est beaucoup plus sûr.
0 votes
@Gregg, je suppose que cela dépend de l'entrée attendue. Typiquement, si j'écris une fonction où un argument peut être plus qu'une des valeurs "falsy" possibles, je considère que c'est un problème de conception et j'essaie de remanier. Cela dit, je vais clarifier le sucre pour que l'on comprenne bien ce qu'il signifie.