3 votes

Jeton inattendu :

 <script>
    function createPerson(firstName, lastName)
    {
        return
        {
            firstName: firstName,
            lastName: lastName, //This line!!!
            getFullName: function() {
                return this.firstName + " " + this.lastName;
            },
            greet: function(person) 
            {
             alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
            }

        };
    }
    var johnDoe = createPerson("John" , "Doe");
    var janeDoe = createPerson("Jane" , "Doe");

    johnDoe.greet(janeDoe);
</script>

Pourquoi cette ligne génère-t-elle une erreur ? "Unxpected token :". C'est un exemple tiré d'un livre, j'ai fait exactement la même chose mais cette erreur apparaît. Je ne sais pas ce qui ne va pas.

5voto

DontVoteMeDown Points 4327

Vous ne pouvez pas rompre une ligne devant une return déclaration.

function createPerson(firstName, lastName)
{
    return {
        firstName: firstName,
        lastName: lastName, //This line!!!
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) 
        {
         console.log("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

3voto

Kristianmitk Points 2658

Supprimez le saut de ligne après le return . Comme un saut de ligne est traité comme un ; en raison de l'utilisation de JavaScript insertion automatique du point-virgule

Démo

function foo() {
  return
  'foo';
}
console.log(foo()) // undefined

function bar() {
  return 'bar';
}
console.log(bar()) // bar

Votre extrait corrigé

function createPerson(firstName, lastName)
{
    return {
        firstName: firstName,
        lastName: lastName,
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) 
        {
         console.log("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

Pour élaborer sur l'erreur réelle :

{..} est interprété comme un bloc. firstName: est interprété comme un étiquette. firstName, lastName: lastName est interprété comme la virgule qui attend deux expressions, lastName: lastName n'est pas un expression valide car : n'est pas valable ici. D'où l'erreur "Unxpected token :" . - Felix Kling

3voto

CertainPerformance Points 110949

Vous avez

return
{

Javascript a l'insertion automatique du point-virgule ; pour l'interprète, votre code ressemble à ceci

return;
{

parce que le { est sur le suivant et parce qu'il est légal d'exister par lui-même.

Mettez le { sur la même ligne que le return à la place :

return {
  // ...

2voto

generalhenry Points 9763

Il échoue parce qu'il est équivalent à :

function createPerson(firstName, lastName)
{
    return;
    {
        firstName: firstName,
        lastName: lastName, //This line!!!
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) 
        {
         alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

en raison de l'insertion automatique de points-virgules. C'est pourquoi le style le plus courant consiste à ouvrir les fougères sur la même ligne.

function createPerson(firstName, lastName) {
    return {
        firstName: firstName,
        lastName: lastName, //This line!!!
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) {
         alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

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