JavaScript如何判斷參數為浮點型


  在codewars里,確實可以學到很多很酷的方法,例如這一次的題目是判斷數字是否為浮點型。我一開始是想有沒有原生的js方法,像isNaN(),isFinite(),在前者Infinity是不屬於NaN的,會返回false,所以有些時候並不好用。而后者則是判斷是否為有效數字,包括無窮值和非數字的都會返回false。好啦,大概聊這么多也可以知道,js在某些地方還是提供了很多很好的全局函數供我們使用,但是卻沒有判斷是否為浮點型的這一種方法。

  因為我第一次遇到這個問題,腦袋確實不靈光,於是就想到用正則的方法來篩選出整數。然后使用Reg對象的test來返回布爾值,我們大概可以看看正則表達式的整數。

  

  首先包攬正負號,然后因為存在(.23)這樣的形式,所以使用 \d* 再轉義\. 最后任意數字結尾即可。雖然說起來這么簡單,可是一堆火星文,誰看到誰頭疼啊,對不。這么糟粕的方法,怎么維護呢。但是我真的想不到什么巧妙的方法,只好提交的答案。然后看到大神的各種方法。


 

  第一種就是通過位運算,也就是JavaScript的與&, 或|,非~。大致說一下,這里是根據計算機的二進制32位來進行運算的,最后一位是決定正負的符號位,正為0,負為1。

  舉個例子,一個數字5,是0101。一個數字6,便是0110。

  1. 若5&6,則會根據與邏輯表,得到一個新的二進制0100,所以就是數字4。
  2. 若5|6,根據或邏輯表,得到一個新的二進制0111,所以是數字7。
  3. 若~5,則會返回 -num-1,所以~5就是-6。

  沒有試過的同學,有興趣的大家可以自己嘗試一下。好,不跑題了那我說這個為了什么呢?試想一下如果我們對一個整型數字 ~~int,最后應該還是int對吧。但是如果是浮點型呢?~float,則數字會忽略小數位。所以我們~1.23 => -2,然后~-2 => 1,那這樣就可以快速分清楚哪些是浮點型,哪些是整型了。根據這個特性,我們試驗一下。

  

  這個看起來就簡潔多啦,而且因為進行的是底層的位運算,效率也十分的高。


      根據對數字對1求模的特性來判斷,這個方法也是非常的妙!這個是什么意思呢?

  正常來說,int % 1 === 0,但若是float % 1,卻不再是0了,對吧!所以根據特性我們可以用下面的這種方法。

  


 

  根據隱性轉換,巧妙變化。這個巧妙之處,不必多說,直接看代碼吧。

  

  這是利用了JavaScript靈活的隱性轉化,若為整數,則"23.0" == 23是可以的,而浮點型則會真正成為帶有兩個.的字符串。非常巧妙吧!

 

  看完這幾種方法,再回頭看看我的正則表達式,不忍直視啊!這不能算是奇淫巧計吧,多積累一下這些或許再某些地方可以幫到大家!

 

  寫完之后才發現了一個好方法,當時竟然想不到。n != parseInt(n);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM