2017-10-21 48 views
2

我試圖用eslint修復我的代碼和它拋出一個錯誤說:意外的字符串連接

cName: "" + ANR + "", 

意外的字符串連接

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

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

什麼是錯的串聯中這個字符串?

+0

只要'ANR'裏面沒有''''一切都會好的。 – Mouser

+1

如果ANR已經是一個字符串,只要執行'cName:ANR', – charlietfl

+2

就可以用那些有用的信息更新你的答案,而不僅僅是在評論中。 。 。 – Andrew

回答

5

嘗試使用template literal

即。

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

要明確有什麼不對您的語法

這不是JavaScript的拋出該錯誤,它是有no-useless-concat規則集,當它檢測經典字符串連接到拋出一個錯誤的棉短絨設置:

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

但棉絨錯誤並不總是與JavaScript錯誤相同,所以爲了清楚起見,您對字符串連接的使用並不正確,如果您嘗試在瀏覽器或節點等中運行該代碼,則不會拋出JavaScript錯誤。您只會看到錯誤,因爲你的linter規則已經被配置爲比字符串連接更喜歡模板字符串。

no-useless-concat規則假定您處於支持ES6模板文字的環境中,並且使用no-useless-concat規則可幫助強制通過字符串連接實現模板文字的偏好。所以你的linter找到了一個字符串連接的例子,並且拋出一個錯誤來提醒你應該使用模板文字(記住你的linter是可配置的,所以你可以通過選擇打開這個設置,或者你正在工作的項目正試圖強制執行特定的編碼風格)。

no-useless-concat規則

所以,

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

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

如果您想了解更多關於規則(如何禁用它,更改錯誤設置,禁用它一起,等等),那麼這裏是文檔:https://eslint.org/docs/rules/no-useless-concat


雖然沒有什麼不對您的語法本身,它不需要墊串孔卡空字符串如果你已經知道你正在打印的值是一個字符串,那麼它就是tenation。做ANR + 'something'就夠了,不需要'' + ANR + 'something' + ''。您唯一需要填充空字符串的時間是,如果您試圖確保在拼接發生之前您打印的值爲cast to a string,但通常您希望在打印之前知道要打印的變量的數據類型。

0

添加到行此評論「// eslint-禁用行更喜歡模板」

掉毛完全是膚淺的,除非有真正需要使用模板,作者(你)不應該由表面變化負擔。