为什么我使用 =(单个等于)的等式比较不能正常工作?[复制]

Why doesn't my equality comparison using = (a single equals) work correctly? [duplicate]

提问人:Sam 提问时间:7/8/2016 最后编辑:T.J. CrowderSam 更新时间:7/8/2016 访问量:434

问:

我正在尝试检查字符串是否为空、小于或等于 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

JavaScript 平等

评论

2赞 T.J. Crowder 7/8/2016
我敢肯定,这肯定有一个规范的问题......
1赞 Quentin 7/8/2016
@T.J.Crowder——有可能,但如果他们中的任何一个有像这个一样清晰的标题,我会感到惊讶。大多数情况下,他们来做“我的代码不起作用,我不知道为什么”
0赞 T.J. Crowder 7/8/2016
@Quentin:是的。我正在将其编辑为一个。:-)
0赞 Quentin 7/8/2016
@T.J.Crowder — 哎呀,没注意到那是你的编辑:)
0赞 T.J. Crowder 7/8/2016
@Quentin:不用担心,这是一个更好的标题

答:

7赞 3 revsT.J. Crowder #1

=始终是赋值。相等比较是(松散的、强制类型以尝试进行匹配)或(无类型强制)。=====

所以你想要

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

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

当你这样做时,会发生什么,即赋值完成,然后测试结果 (),有效地像这样(如果我们忽略几个细节):if (str = '')str = ''''

str = '';
if (str) {

由于 JavaScript 中是一个虚假值,因此该检查将为 false,并进入该步骤。因为在这一点上,是 ,这就是代码所采用的路径。''else if (str.length <= 9)str.length0