Un cas où le point virgule est important !

Le code Javascript permet une plus grande souplesse syntaxique et plus particulièrement, le developpeur peu s’aquitter de l’usage des fameux point virgule ‘;’ qui terminent chaque instructions.

Dans certains cas, le ‘;’ peu s’avérer obligatoire :


//Ce petit script affiche dans la console si 'n' est pair ou impair 
//et insére cette valeur dans le tableau associé.

let even = [], odd = []

let n = 246

console.log('n is %s', n % 2 === 0 ? 'even' : 'odd')

(n % 2 === 0 ? even : odd).push(n)

Sortie


TypeError: console.log(...) is not a function
at Object.<anonymous> (D:\MSO Consulting\Formations\Javascript\Docs\Samples\Server\server.js:39:1)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

Bug

Bug à la compilation : console.log(…) is not a function.

La raison

Du fait de l’absent de ‘;’ à la fin de l’instruction console.log(…) Javascript interprète le code précédent comme l’appel d’une fonction imbriquée:

fonction()(param).push(element)

console.log('n is %s', n % 2 === 0 ? 'even' : 'odd')(n % 2 === 0 ? even : odd).push(n)

Dans ce cas précis, il est donc nécessaire d’ajouter un ‘;’ à la fin de l’instruction console.log (…)

Solution

console.log('n is %s', n % 2 === 0 ? 'even' : 'odd');
(n % 2 === 0 ? even : odd).push(n)

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *