2017-10-21 22 views
2

Je suis en train de fixer mon code à l'aide eslint et son lancer une erreur en disant:concaténation chaîne inattendue

cName: "" + ANR + "", 

concaténation chaîne inattendue

const ANR = 'Animal Friend,ANR,ANP,$30'; 

     const specialityPlates = [{ 
     cName: 'Environmental/Wildlife', 
     oSubMenu: [{ 
     cName: "" + ANR + "", 
     cReturn: "" + ANR + "|27.00" 
     }, 
     { 

Quel est le problème avec la concaténation en cette chaîne?

+0

Tant que 'ANR' n'a pas' '' 'dedans, tout devrait bien se passer. – Mouser

+1

Si ANR est déjà une chaîne juste faire 'cName: ANR,' – charlietfl

+2

peut-être mettre à jour votre réponse avec cette information utile plutôt que juste dans le commentaire. . . – Andrew

Répondre

5

Essayez d'utiliser un template literal.

ie.

const ANR = 'Animal Friend,ANR,ANP,$30' 
const specialityPlates = [ 
    { 
    cName: 'Environmental/Wildlife', 
    oSubMenu: [{ 
     cName: `${ANR}`, // "Animal Friend,ANR,ANP,$30" 
     cReturn: `${ANR}|27.00` // "Animal Friend,ANR,ANP,$30|27.00" 
    }] 
    } 
] 
4

Pour être clair: il n'y a rien de mal avec votre syntaxe.

Il est pas JavaScript lancer cette erreur, il est vos paramètres de linter qui ont la règle no-useless-concat mis à jeter une erreur lorsqu'il détecte concaténation de chaîne classique:

// classic string concatenation 
'a' + 'b' + 'c'; 

mais une erreur de linter n'est pas toujours Identique à une erreur JavaScript, donc pour être clair, votre utilisation de la concaténation de chaîne n'est pas incorrecte, et ne lancerait pas une erreur JavaScript si vous essayez d'exécuter ce code dans le navigateur, ou Node, etc. Vous ne voyez qu'un erreur car vos règles de linter ont été configurées pour préférer les chaînes de modèles à la concaténation de chaînes. La règle no-useless-concat suppose que vous êtes dans un environnement où les littéraux de modèle ES6 sont pris en charge et l'utilisation de la règle no-useless-concat permet d'appliquer la préférence pour les littéraux de modèle sur la concaténation de chaîne. Votre linter a donc trouvé un exemple de concaténation de chaîne et a lancé une erreur pour vous rappeler que les littéraux de gabarit devraient être utilisés à la place (gardez à l'esprit que votre linter est configurable, donc vous avez activé ce paramètre ou le projet on essaie d'imposer un style de codage spécifique).

Donc, avec la règle no-useless-concat,

// This will throw an error 
"" + ANR + "|27.00"; 

// Use template literals instead 
`${ANR}|27.00`; 

Si vous voulez en savoir plus sur la règle (comment le désactiver, modifier le paramètre d'erreur, désactivez-le tous ensemble, etc.), puis est la documentation ici : https://eslint.org/docs/rules/no-useless-concat


Bien qu'il n'y ait rien de mal avec votre syntaxe en soi, ce ne est pas nécessaire pour les chaînes vides pad pour la chaîne conca tention si vous savez déjà que la valeur que vous imprimez est une chaîne. Faire ANR + 'something' est assez, pas besoin de '' + ANR + 'something' + ''. La seule fois où vous devez tamponner des chaînes vides est que vous vouliez vérifier que la valeur que vous étiez en train d'imprimer était cast to a string avant la concaténation, mais en général, vous voudriez connaître le type de données de la variable que vous imprimez avant de l'imprimer .

0

Ajouter ce commentaire à la ligne « // préférez-modèle eslint-disable-ligne »

Peluchage est tout à fait superficielle et à moins qu'il existe un réel besoin d'utiliser un modèle, l'auteur (vous) ne devrait pas être accablé par des changements superficiels.