为什么我的平等比较使用=(一个等于)正常工作?

我试图检查一个string是否为空,小于或等于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."); } 

不pipe我放什么,我总是得到The string must be at least 9 characters long 。 为什么?

=总是分配。 平等比较是== (宽松,强制types来尝试匹配)或=== (无types强制)。

所以你要

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

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

if (str = '')是完成赋值 str = '' ,然后结果值( '' )被testing,如果我们忽略了一些细节,那么会发生什么?

 str = ''; if (str) { 

由于JavaScript在JavaScript中是一个falsy值,因此该检查将是错误的,并且else if (str.length <= 9)步骤转到else if (str.length <= 9) 。 由于在那个时候, str.length0 ,这就是代码的path。