javascript中的typeof()函数错误[重复]

Posted

技术标签:

【中文标题】javascript中的typeof()函数错误[重复]【英文标题】:typeof() function errors in javascript [duplicate] 【发布时间】:2012-08-02 04:09:37 【问题描述】:

可能重复:Is there a (built-in) way in javascript to check if a string is a valid number?

我有一个 html 输入搜索栏

<form class="form-inline" action="javascript:displayResult()">          
    <input id="searchKey" >
    <button onclick="result()" type="button" class="btn btn-warning btn ">
          Go
    </button>                   
</form>

这是Javascript函数

function result()      
    search($('#searchKey').val());    

    if(typeof(searchKey)=="number")  // checking if this is a number
       someFunction();
    
;

问题是,对于搜索栏中的每个条目,我都会将值作为字符串获取,即使搜索栏中的值是“hello”或 9789。我使用alert(typeof(searchKey)); 进行验证,它总是将类型返回为字符串

我试图在搜索栏中区分数字和字符串,我确信有更好的方法可以做到这一点,但我不确定为什么这不起作用

我不能使用 parseInt() 因为我需要动态区分文本和数字

【问题讨论】:

return 语句之后的代码何时执行? 你在return man后调用它! 抱歉,我已经编辑了我的代码 searchKey 是全局变量吗? 尝试 parseInt(str, base) 如果失败,它应该只返回 0 【参考方案1】:

&lt;input type="text"&gt; 的值始终是一个字符串。但是,您可以使用parseInt 将其解析为数字。如果不能从字符串中解析出数字,它将导致NaN。不要忘记您必须为此使用 isNaN,因为 myNumber === NaN 不是有效的操作。

更好的是,使用isNaN(+searchKey),因为一元操作数将调用ToNumber。但是,这将忽略空格。

9.3.1 ToNumber 应用于字符串类型

应用于字符串的ToNumber 将以下语法应用于输入字符串。如果语法无法解释 String 作为 StringNumericLiteral 的扩展,则 ToNumber 的结果为 NaN。

[具体规则见http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf]


11.4.6 一元 + 运算符

一元 + 运算符将其操作数转换为数字类型。 产生式 UnaryExpression : + UnaryExpression 的评估如下:

    设 expr 为计算 UnaryExpression 的结果。 返回到数字(GetValue(expr))。

【讨论】:

它有时无法工作。像“123dwabc”。 @blueiur:您可以使用parseInt(val).toString() == val 确保两个值相同,也可以使用regular expression。 我认为使用 parseFloat 而不是 parseInt :)【参考方案2】:

文本输入字段始终包含 string 值。尝试if (!isNaN(searchKey)) 来测试数值。或者,您可以使用正则表达式:/^\d+$/.test(searchKey)

【讨论】:

【参考方案3】:

使用

if(!isNaN(searchKey))

而不是

if(typeof(searchKey)=="number")

【讨论】:

以上是关于javascript中的typeof()函数错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript使用构造函数获取变量的类型名

JavaScript使用构造函数获取变量的类型名

javascript typeof / NaN 混淆

判断JavaScript值的类型可以用typeof和instanceof

关于JavaScript中的typeof与instanceof

JavaScript typeof()