2015-11-06 64 views
1

我正在嘗試執行某些表單驗證,並且由於某些原因,當我在輸入字段中輸入數字時,它將typeof顯示爲字符串。爲什麼JavaScript在其數字中顯示typeof爲「string」?

我真的不能把我的頭圍繞着這個。我嘗試過在線研究,但找不到答案。

任何幫助將非常感激。以下是我的代碼鏈接到jsfiddle示例。

預先感謝您

https://jsfiddle.net/eldan88/2xb47g78/

<button>Check if number</button> 
<input id="number" type="number"> 

<script> 

$("button").click(function() { 

    var number = $("#number").val(); 

    alert(typeof (number)); 

    if(typeof number !== "number"){ 
     alert("not a number"); 
    } 




}); 


</script> 
+1

使用'.VAL()'總是會返回一個字符串。你可以試着先解析它,然後檢查它....'var number = parseInt($(「#number」)。val());' – AdamJeffers

+0

@AdamJeffers將不起作用 - typeof(NaN)是「數字」。需要的是isNaN()函數。 – TAGraves

+0

@TAGraves ...通過「檢查它」我的意思是檢查它解析爲int ...應該更清楚一些: -/ – AdamJeffers

回答

3

這是因爲輸入的值總是一個字符串。例如,當我輸入3時,實際值不是數字3,它是字符串"3"。要檢查它是否不是數字,請使用isNaN(),這是一個Javascript本地函數,用於檢查某些內容是否不是數字。例如,當您運行isNaN("3")時,它將返回false,因爲3是一個數字。

+0

小心; isNaN(「」)在這種情況下返回false,它看起來應該返回true。嘗試先使用parseFloat()或Number()將其轉換爲數字更安全。 – TAGraves

+0

TaGraves是正確的,你需要小心。 Javascript很容易進行類型強制轉換,所以如果它希望得到一個數字,它會將一個字符串轉換爲數字等等。但是這是一個常見的地方,人們被抓住了,因爲強制不是普遍的,有時它看起來很好地方,但另一個使用相同的價值不強迫,然後事情破裂。 –

+0

這是一個很好的觀點。我錯過了。感謝您的提示。 –

2

輸入元素的值屬性始終存儲爲一個字符串,所以typeof運算始終會返回「字符串」。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

你需要編寫自己的自定義功能,以確定輸入的類型。

+0

或者,使用像parseFloat這樣的內建方法來查看它是否會拋出錯誤。或者使用'Number(str)'將其轉換爲數字並查看它是否返回'NaN'。 –

0

Here on w3.org。它adivses: -

=浮點數#

表示號碼的字符串。

0
var myVar=5 
alert(typeof myVar) //Number 

var myVar = "5" 
alert(typeof myVar) //String 

var myVar = "5" 
var vResult = parseInt(myVar); 
alert(typeof vResult) //Number 

在你的情況怎樣從文本框返回的IS .VAL(),這始終是一個字符串。

0

正如其他人所說,HTML輸入元素始終將其值存儲爲字符串,即使這些值是「數字字符串」。這裏是讓您的驗證工作的一種方式:

$("button").click(function() { 
 

 
    var number = $("#number").val(); 
 

 
    alert(Number(number)); 
 

 
    if(isNaN(Number(number))){ 
 
     alert("not a number"); 
 
    } 
 

 
});

+0

'isNaN'認爲'「\ t \ n \ f \ r」'是一個數字。 – Oriol

相關問題