Il existe des différences entre les deux:
new Date().toString()
fonctionne parfaitement et renvoie la date actuelle
new Date.toString()
lance "TypeError: Date.toString est pas un constructeur"
Il arrive parce que new Date()
et new Date
ha une préséance différente.Selon MDN la partie du tableau de priorité des opérateurs JavaScript qui nous intéresse ressemble à:
╔════════════╦═════════════════════════════╦═══════════════╦═════════════╗
║ Precedence ║ Operator type ║ Associativity ║ Operators ║
╠════════════╬═════════════════════════════╬═══════════════╬═════════════╣
║ 18 ║ Member Access ║ left-to-right ║ … . … ║
║ ║ Computed Member Access ║ left-to-right ║ … [ … ] ║
║ ║ new (with argument list) ║ n/a ║ new … (…) ║
╠════════════╬═════════════════════════════╬═══════════════╬═════════════╣
║ 17 ║ Function Call ║ left-to-right ║ … (…) ║
║ ║ new (without argument list) ║ right-to-left ║ new … ║
╚════════════╩═════════════════════════════╩═══════════════╩═════════════╝
À partir de ce tableau suit que:
new Foo()
a une priorité plus élevée alors new Foo
new Foo()
a la même précédence que .
opérateur
new Foo
a une priorité niveau inférieur alors .
opérateur
new Date().toString()
fonctionne parfaitement, car il évalue comme (new Date()).toString()
new Date.toString()
lancers francs « TypeError: Date.toString est pas un constructeur » parce .
a une priorité plus élevée alors new Date
(et supérieur à "Appel de fonction") et l'expression est évaluée comme (new (Date.toString))()
La même logique peut être appliquée à l'opérateur … [ … ]
.
new Foo
a droit à gauche associativité et new Foo()
« associativité » est pas applicable. Je pense qu'en pratique cela ne fait aucune différence. Pour plus d'informations voir this question si
Is one preferred over the other?
Sachant tout ce que l'on peut supposer que new Foo()
est préféré.
http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.2 – SheetJS
Référence mise à jour: ECMAScript 2017 [* §12.3.3 Le nouvel Opérateur *] (http: // ecma -international.org/ecma-262/8.0/#sec-new-operator). – RobG