篇文章主要介紹了五種JavaScript判斷是否為整數(shù)類型方式,需要的朋友可以參考下
這篇看看如何判斷為整數(shù)類型(Integer),JavaScript中不區(qū)分整數(shù)和浮點數(shù),所有數(shù)字內(nèi)部都采用64位浮點格式表示,和Java的double類型一樣。但實際操作中比如數(shù)組索引、位操作則是基于32位整數(shù)。
方式一、使用取余運算符判斷
任何整數(shù)都會被1整除,即余數(shù)是0。利用這個規(guī)則來判斷是否是整數(shù)。
以上輸出可以看出這個函數(shù)挺好用,但對于字符串和某些特殊值顯得力不從心
對于空字符串、字符串類型數(shù)字、布爾true、空數(shù)組都返回了true,真是難以接受。對這些類型的內(nèi)部轉(zhuǎn)換細節(jié)感興趣的請參考:JavaScript中奇葩的假值
因此,需要先判斷下對象是否是數(shù)字,比如加一個typeof
嗯,這樣比較完美了。
方式二、使用Math.round、Math.ceil、Math.floor判斷
整數(shù)取整后還是等于自己。利用這個特性來判斷是否是整數(shù),Math.floor示例,如下
這個直接把字符串,true,[]屏蔽了,代碼量比上一個函數(shù)還少。
方式三、通過parseInt判斷
很不錯,但也有一個缺點
竟然返回了false,沒天理啊。原因是parseInt在解析整數(shù)之前強迫將第一個參數(shù)解析成字符串。這種方法將數(shù)字轉(zhuǎn)換成整型不是一個好的選擇。
方式四、通過位運算判斷
這個函數(shù)很不錯,效率還很高。但有個缺陷,上文提到過,位運算只能處理32位以內(nèi)的數(shù)字,對于超過32位的無能為力,如
復(fù)制代碼代碼如下:
isInteger(Math.pow(2, 32)) // 32位以上的數(shù)字返回false了
當(dāng)然,多數(shù)時候我們不會用到那么大的數(shù)字。
方式五、ES6提供了Number.isInteger
目前,最新的Firefox和Chrome已經(jīng)支持。
以上就是判斷是否為整數(shù)類型的五種方式,這五種方式各有優(yōu)缺點,大家可以進行仔細比較,選擇最優(yōu)的進行使用。
多時候?qū)τ星岸斯こ處焷碇v,頁面效果直接會轉(zhuǎn)嫁個CSS或JS,對HTML的一些屬性了解的并不充分,接下來介紹一些有意思的HTML屬性。
1)Multiple
顧名思義就是在一個輸入標(biāo)簽或選擇標(biāo)簽中可以輸入多個值
<input type="file" multiple>
2)Accept
在<input>包含接受屬性,允許用戶傷上傳指定的文件類型。我們在設(shè)置的過程中,需要設(shè)置指定的文件格式。并用逗號分開即可。傳遞文件類型包含圖片、音頻、視頻、文檔,等自定義文件類型。
<input type="file" accept=".png, .jpg">
3)Contenteditable
這個屬性比較有意思,允許用戶在前端HTML頁面進行對文本的編輯,只對DOM的可見部分進行編輯。
<div contenteditable="true">我可以隨意編輯!</div>
4)Spellcheck
進行拼寫檢查的可編輯段落:
<p contenteditable="true" spellcheck="true">這是一個段落。</p>
5) Translate
Translate告訴瀏覽器是否應(yīng)該翻譯內(nèi)容。例如,您可以使用它來防止Google Translate自動嘗試翻譯您的公司或品牌名稱。
<footer><p translate="no">Mark</p></footer>
6) Poster
帶有預(yù)覽圖(海報圖片)的視頻播放器:
注釋:Internet Explorer 8 以及更早的版本不支持 <video> 標(biāo)簽。
<video controls poster="/images/mark.gif">
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
7) Download
download 屬性規(guī)定被下載的超鏈接目標(biāo)。
在 <a> 標(biāo)簽中必須設(shè)置 href 屬性。
該屬性也可以設(shè)置一個值來規(guī)定下載文件的名稱。所允許的值沒有限制,瀏覽器將自動檢測正確的文件擴展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。
avaScript 數(shù)據(jù)類型一共有 7 種:Undefined、Null、Boolean、String、Symbol、Number、Object。除了 Object 之外的 6 種屬于原始數(shù)據(jù)類型。有時,我們還會細分 Object 的類型,比如 Array,F(xiàn)unction,Date,RegExp 等。
判斷方法
typeof
typeof 可以用來區(qū)分除了 Null 類型以外的原始數(shù)據(jù)類型,對象類型的可以從普通對象里面識別出函數(shù):
問題一:typeof 不能識別 null,如何識別 null?
答案:如果想要判斷是否為 null,可以直接使用===全等運算符來判斷(或者使用下面的Object.prototype.toString 方法):
問題二:typeof 作用于未定義的變量,會報錯嗎?
答案:不會報錯,返回"undefined"。
問題三:typeof Number(1)的返回值是什么?
答案:"number"。注意 Number 和 String 作為普通函數(shù)調(diào)用的時候,是把參數(shù)轉(zhuǎn)化為相應(yīng)的原始數(shù)據(jù)類型,也就是類似于做一個強制類型轉(zhuǎn)換的操作,而不是默認(rèn)當(dāng)做構(gòu)造函數(shù)調(diào)用。注意和 Array 區(qū)分,Array(...)等價于 new Array(...)
問題四:typeof new
Number(1)的返回值是什么?
答案:"object"。
instanceof
instanceof 不能用于判斷原始數(shù)據(jù)類型的數(shù)據(jù):
instanceof 可以用來判斷對象的類型:
需要注意的是,instanceof 的結(jié)果并不一定是可靠的,因為在 ECMAScript7 規(guī)范中可以通過自定義 Symbol.hasInstance 方法來覆蓋默認(rèn)行為。
Object.prototype.toString
由上面的示例可知,該方法沒有辦法區(qū)分?jǐn)?shù)字類型和數(shù)字對象類型,同理還有字符串類型和字符串對象類型、布爾類型和布爾對象類型,另外,ECMAScript7 規(guī)范定義了符號 Symbol.toStringTag,你可以通過這個符號自定義Object.prototype.toString 方法的行為:
因為 Object.prototype.toString 方法可以通過 Symbol.toStringTag 屬性來覆蓋默認(rèn)行 為,所以使用這個方法來判斷數(shù)據(jù)類型也不一定是可靠的。
Array.isArray
Array.isArray(value)可以用來判斷 value 是否是數(shù)組:
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。