【问题标题】:typeof command doesnt worktypeof 命令不起作用
【发布时间】:2016-06-30 14:41:44
【问题描述】:

您好,我正在尝试检查 DOM 的值:

if ($('#ATTN').val() == '') {               
    $('#ATTN').val(0);
} else {
    iattn=$('#ATTN').val();
    alert(iattn);

    if(typeof iattn == 'number'){
        alert('oh');
    }
}

但它什么也不返回。也没有显示错误。

【问题讨论】:

  • 你有没有打开你的调试器,看到typeof iattn到底等于什么?
  • 如果您从输入类型文本中获取 typeof iattn,它似乎是一个字符串。
  • $('#ATTN').val() - 返回字符串,而不是数字。
  • @TarasKumpanenko 并非所有种情况(见How can val() return Number?
  • @p.s.w.g 但绝对是在这种情况下

标签: javascript jquery typeof


【解决方案1】:

这一行

iattn=$('#ATTN').val();

返回一个字符串。

如果你想看能不能转成整数,那么你想要的是这样的:

iattn=parseInt($('#ATTN').val());
if (iattn) {
    alert("oh");
}

如果您想要更通用的数字测试,请使用 parseFloat 而不是 parseInt

如果要检查解析结果是否与输入匹配,请使用以下内容:

iattn=$('#ATTN').val();
if (iattn == parseInt(iattn)) {
    alert("oh");
}

一个更简单的检查,它实际上不会将任何内容转换为数字,并且将允许所有数字格式(例如 2.3、0x3、+23)是这样的:

if (!isNaN(iattn)) {
    alert("oh");
}

来自@p.s.w.g 的评论。

【讨论】:

  • 但是用户可能会错误地给出文本值,并且 parseint 也会将其转换为整数。那会弄得一团糟!
  • 如果用户给出的文本值不能转换为整数,iattn 将是NaN,if 条件将失败。
  • 我已更新检查解析值是否与输入相似,以处理“2sdfsdsdf”等情况。但是如果用户输入例如“2.0”,检查将失败。
  • 我相信if (!isNaN(iattn)) 对除空字符串之外的所有情况都是等效的(如有必要,您可以使用if (iattn && !isNaN(iattn)))。
【解决方案2】:

.val() 返回一个DOMString(字符串)

所以typeof iattn 永远是string

如果你想要typeof number,你需要转换成int

使用parseInt(iattn)parseFloat(iattn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2023-04-08
    • 2018-11-14
    • 2012-08-27
    • 2014-11-25
    • 2016-12-11
    • 2018-12-18
    相关资源
    最近更新 更多