javascript中的typeof()函数错误

时间:2012-08-04 08:23:12

标签: javascript jquery html

  

可能重复:
  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(),因为我需要动态区分文本和数字

3 个答案:

答案 0 :(得分:5)

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

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

  

9.3.1 ToNumber应用于字符串类型

     

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

     

[请参阅http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf了解实际规则]


  

11.4.6一元+算子

     

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

     
      
  1. 让expr成为评估UnaryExpression的结果。
  2.   
  3. 返回ToNumber(GetValue(expr))。
  4.   

答案 1 :(得分:3)

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

答案 2 :(得分:3)

使用

if(!isNaN(searchKey))

而不是

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