为什么我的等式比较使用=(单个等于)才能正常工作?

时间:2016-07-08 13:48:22

标签: javascript equality

我正在尝试检查字符串是否为空,小于或等于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。为什么呢?

1 个答案:

答案 0 :(得分:7)

=始终是作业。平等比较是==(松散,强制类型以尝试匹配)或===(无类型强制)。

所以你想要

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

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

执行if (str = '')后会发生什么?分配 str = ''已完成,然后测试结果值(''),就像这样(如果我们忽略了一些细节):

str = '';
if (str) {

由于''是JavaScript中的 falsy 值,因此该检查将为false并进入else if (str.length <= 9)步骤。从那时起,str.length0,这就是代码所采用的路径。