2016-07-08 31 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,这就是代码所需的路径。