2016-07-08 64 views
0

我試圖檢查一個字符串是否爲空,小於或等於9位或最多10位。但它總是遵循else if (str.length <= 9)爲什麼我的平等比較使用=(單個等於)正常工作?

if (str = ''){ 
    console.log("The string cannot be blank"); 
} else if (str.length <= 9) { 
    console.log("The string must be at least 9 characters long"); 
} else if (str.length <= 10) { 
    console.log("The string is long enough."); 
} 

不管我放什麼,我總是得到The string must be at least 9 characters long。爲什麼?

+2

我敢肯定,這肯定有一個規範的問題... –

+1

@ T.J.Crowder - 可能,但我會很驚訝,如果他們中的任何一個人的標題像這個一樣清晰。他們大部分來做「我的代碼不起作用,我不知道爲什麼」 – Quentin

+0

@Quentin:是的。我正在編輯成一個。 :-) –

回答

7

=始終是賦值。平等比較是==(寬鬆,強制類型以嘗試匹配)或===(無類型強制)。

所以,你要

if (str === ''){ 
// -----^^^ 

// NOT THIS 
if (str = ''){ 
// -----^ 

當你做if (str = '')是,分配str = ''完成,然後將得到的值('')測試會發生什麼情況,有效地像這樣(如果我們忽略了一些細節):

str = ''; 
if (str) { 

由於''falsy在JavaScript中的值,該檢查將是錯誤的,它將轉到else if (str.length <= 9)步驟。從那時起,str.length就是0,這就是代碼所需的路徑。