【问题标题】:Why doesn't my equality comparison using = (a single equals) work correctly? [duplicate]为什么我使用 =(单个等号)进行的等式比较不能正常工作? [复制]
【发布时间】:2016-11-11 02:54:46
【问题描述】:

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

【问题讨论】:

  • 我敢肯定这个问题一定有一个规范的问题......
  • @T.J.Crowder — 可能,但如果他们中的任何一个的标题和这个一样清晰,我会感到惊讶。他们大多来做“我的代码不起作用,我不知道为什么”
  • @Quentin:是的。我正在把它编辑成一个。 :-)
  • @T.J.Crowder — 糟糕,没注意到那是你的编辑 :)
  • @Quentin:别担心,这个标题更好

标签: javascript equality


【解决方案1】:

= 总是赋值。相等比较是==(松散,强制类型以尝试匹配)或===(无类型强制)。

所以你想要

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

不是

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

当您执行 if (str = '') 时会发生 assignment str = '' 完成,然后测试结果值 (''),实际上就像这样(如果我们忽略一对详情):

str = '';
if (str) {

由于 '' 在 JavaScript 中是一个 falsy 值,因此该检查将是错误的,它会转到 else if (str.length &lt;= 9) 步骤。因为此时str.length0,这就是代码所采用的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2019-01-22
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2014-11-20
    • 2011-04-07
    相关资源
    最近更新 更多