57 votes

Nœud v6 à défaut sur l'objet de la propagation

J'avais une question au sujet de pourquoi nœud v6.7 serait en défaut d'exécuter ce code:

var a = {
    foo: 'bar'
}

var b = {
    ...a,
    my: 'sharona'
}
console.log(b)

Quelqu'un a une idée de pourquoi cela serait? J'ai pensé v6 d'objet pris en charge la propagation..? Mais je ne crois pas? 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

58voto

saadq Points 8314

À l'aide de repos/de l'écart avec les objets est une proposition distincte, que vous pouvez lire ici. Une proposition n'est pas acceptée pour le annuelle ES à moins qu'il atteint le stade 4, et il est actuellement à l'étape 3. Il peut le faire dans ES2018. Si vous voulez l'utiliser dès maintenant, vous aurez à utiliser un transpiler comme babel.


EDIT: Comme de Nœud v8.3, de l'objet au repos et à la propagation est disponible sans la nécessité pour toutes les transpilation.

49voto

slebetman Points 28276

Ressemble ES6 propagation de l'opérateur ne fonctionne que pour les tableaux et iterables. Il est spécialement conçu pour ne PAS fonctionner pour les objets: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator

Citation:

S'appliquent uniquement pour 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 le MDN article précédemment suggéré que d'essayer d'utiliser la propagation de l'opérateur sur les objets doivent résultat non défini, plutôt que de jeter une erreur. Comme de cette révision, le courant MDN article traite de l'appui à la "Propagation pour objet de littéraux"

En outre, l'node.js tableau de compatibilité des réclamations node.js entièrement conforme à la spécification de la propagation de l'opérateur avec des tableaux et iterables, mais indique explicitement que l'objet reste transmettre les propriétés ne sont pas pris en charge: http://node.green/#ESNEXT-candidate--stage-3--object-rest-spread-propertiesau moins pas jusqu'à ce que le Nœud de la version 8.60 (d'où la couleur s'allume en vert pour indiquer que le début à l'article 8.3, le Noeud ne soutien de l'objet de la propagation et de repos de l'opérateur, comme l'a fait remarquer dans l'autre réponse)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X