亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在JavaScript中將字符串轉換為整數?

在JavaScript中將字符串轉換為整數?

在JavaScript中將字符串轉換為整數?如何在JavaScript中將字符串轉換為整數?
查看完整描述

4 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

在javascript中將字符串轉換為數字有兩種主要方法。一種方法是解析它,另一種方法是將其類型更改為數字。其他答案中的所有技巧(例如一元加)都涉及隱含地將字符串的類型強制轉換為數字。您也可以使用Number函數顯式執行相同的操作。

解析

var parsed = parseInt("97", 10);

parseInt和parseFloat是用于將字符串解析為數字的兩個函數。解析會在遇到無法識別的字符時靜默停止,這對于解析像“92px”這樣的字符串很有用,但它也有點危險,因為它不會在輸入錯誤時給你任何錯誤,而是你除非字符串以數字開頭,否則將返回NaN。字符串開頭的空格將被忽略。這是一個例子,它做了一些不同于你想要的東西,并沒有表明出現任何問題:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

總是將基數指定為第二個參數是一種好習慣。在較舊的瀏覽器中,如果字符串以0開頭,如果未指定基數,則會將其解釋為八進制,這會讓很多人感到意外。如果沒有指定基數,則通過使字符串以0x開頭來觸發十六進制的行為,例如0xff。標準實際上使用ecmascript 5進行了更改,因此如果沒有指定基數,則當前導0時,現代瀏覽器不再觸發八進制。parseInt將基數理解為基數36,在這種情況下,大寫和小寫字母都被視為等價。

將字符串的類型更改為數字

上面提到的所有其他不使用parseInt的技巧都涉及隱式地將字符串強制轉換為數字。我更愿意明確地這樣做,

var cast = Number("97");

這與解析方法有不同的行為(盡管它仍然忽略空格)。它更嚴格:如果它不理解整個字符串而不是它返回NaN,那么你不能將它用于像字符串這樣的字符串97px。由于您需要原始數字而不是數字包裝器對象,因此請確保不要放在new數字函數前面。

顯然,轉換為Number會給出一個可能是float而不是整數的值,所以如果你想要一個整數,你需要修改它。有幾種方法可以做到這一點:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.roundvar fixed = Number("97.654").toFixed(0); 
// rounded rather than truncatedvar bitwised = Number("97.654")|0;  // do not use for large numbers

任何按位運算符(這里我做了一個按位或,但你也可以做一個雙重否定,如在前面的回答或一個位移)將把值轉換為32位整數,其中大多數將轉換為有符號整數。請注意,這不希望您想要大整數。如果整數不能用32位表示,它將換行。

~~"3000000000.654" === -1294967296// This is the same asNumber("3000000000.654")|0"3000000000.654" >>> 0 === 3000000000 
// unsigned right shift gives you an extra bit"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

要使用更大的數字,您應該使用舍入方法

Math.floor("3000000000.654") === 3000000000// This is the same asMath.floor(Number("3000000000.654"))

請記住,所有的這些方法的理解指數形式,所以2e2200不是NaN的。此外,Number理解“Infinity”,而解析方法則不理解。

習慣

這些方法中的任何一種都不可能完全符合您的要求。例如,通常我希望在解析失敗時拋出錯誤,并且我不需要支持Infinity,指數或前導空格。根據您的用例,有時編寫自定義轉換函數是有意義的。

始終檢查Number或其中一個解析方法的輸出是否是您期望的數字。您幾乎肯定會想要isNaN確保該數字不是NaN(通常是您發現解析失敗的唯一方法)。


查看完整回答
反對 回復 2019-05-29
  • 4 回答
  • 0 關注
  • 2667 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號