J'avais une question sur pourquoi le noeud v6.7 ne pourrait pas exécuter ce code:
var a = {
foo: 'bar'
}
var b = {
...a,
my: 'sharona'
}
console.log(b)
Quelqu'un a une idée pourquoi ce serait? Je pensais que v6 supportait la propagation d'objets ..? Mais je suppose que non? Voici l'erreur que je vois:
/home/teselagen/ve/tnrtest.js:6
...a,
^^^
SyntaxError: Unexpected token ...
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:528:28)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
On dirait que l'opérateur ES6 spread ne fonctionne que pour les tableaux et les iterables. Il est spécialement conçu pour NOT WORK pour les objets: https://developer.mozilla.org/en/docs/Web/JavaScript/ Référence/Opérateurs/Spread_operator
Citation pertinente:
Ne s'applique qu'aux iterables
var obj = {"key1":"value1"}; function myFunction(x) { console.log(x); // undefined } myFunction(...obj); var args = [...obj]; console.log(args, args.length) //[] 0
Bien que l'article de MDN ait précédemment suggéré qu'essayer d'utiliser l'opérateur d'étalement sur des objets devrait entraîner un indéfini au lieu de générer une erreur. À compter de cette révision , l'article actuel de MDN traite de la prise en charge de "Répandre pour les littéraux d'objet".
De plus, la table de compatibilité de node.js affirme que node.js est entièrement conforme à la spécification de l'opérateur de propagation avec les tableaux et les iterables, mais indique spécifiquement que les propriétés reste/propagation d'objet ne sont pas prises en charge: http://node.green/ # ESNEXT-candidate - stage-3 - object-rest-spread-properties , du moins pas avant Node version 8.60 (à quel point la couleur devient verte pour indiquer le début dans 8.3, Node fait prend en charge l'opérateur d'étalement/de repos d'objet, comme indiqué dans l'autre réponse )
Utiliser rest/spread with objects est une proposition séparée, que vous pouvez lire à propos de here . Une proposition ne sera pas acceptée pour la version annuelle de l'ES à moins qu'elle n'atteigne le stade 4, et il s'agit actuellement de l'étape 3. Elle peut éventuellement passer à l'ES2018. Si vous voulez l'utiliser maintenant, vous devrez utiliser un transpiler comme babel
.
EDIT: À partir de Node v8.3, le repos/la propagation d'un objet est disponible sans qu'aucune transpilation ne soit nécessaire.