簡體   English   中英

JavaScript初學者:ParseInt()的誤解

[英]JavaScript beginner: ParseInt() misunderstanding

我正在自我學習自己從Internet上挖掘的視頻中的JavaScript。 大多數人傾向於快速掩蓋事物,並留下大量問題。 因此,我使用Firebug 2.0.2在Firefox 21中測試了事物,以觀察它們的行為。 這是以下代碼的唯一目的。

Console.log輸出

>>> var n=parseInt("34","22","18",10);console.log(n);
70

我最初的想法是,它解析每個提供的字符串,然后返回總和。 然后我進行了實際的數學運算,並意識到如果是這種情況,總和應該是74。

更有趣的是,實際上是什么促使我自己做數學,而不是單單認為自己是數學家而不用思考。 當我減少一個數字字符串的值(無論如何,根據我的經驗,從22到21)返回67而不是預期的69。

Console.log輸出

in:10>>> var n=parseInt("34","21","18",10);console.log(n);
67

這里到底發生了什么? parseInt是否僅設計為不能容納多個數字字符串?

沒有parseInt不采用多個字符串,而是采用一個字符串和一個可選的基數(即數字所基於的基數)

在此處參考MDN參考

最后一個例子中發生了什么

parseInt("34","21","18",10)

是您告訴javascript以21為底數解析34(其他參數18和10被忽略)

基數21中的34是67(即3 x 21 + 4)

編輯:和在基地22的34是70(3 * 22 + 4)。 請參閱以下答案以獲取轉換鹼基的信息方法: https : //answers.yahoo.com/question/index?qid=20090508092544AAxAokR

如果要累加數字,請先分別解析它們,然后再添加它們

var n1 = parseInt("34",10);
var n2 = parseInt("22",10);
var n3 = parseInt("18",10);
var result = n1 + n2 + n3;

同樣,如果您確定字符串只包含數字(例如,“ 22”,而不是“ 22 widgets”,因為parseInt會解析所有內容,直到第一個非數字字符,所以parseInt(“ 22 widgets”)將返回22) ,那么您可以作弊一下,只需在開頭加一個+

var n1 = +"34";
var n2 = +"22";
var n3 = +"18";
var result = n1 + n2 + n3;

同樣的結果

parseInt接受一個必需的參數和一個可選的參數,並忽略其他所有內容。 可選的(第二個)參數是基數,它告訴函數在轉換字符串時要使用哪個數字基數。

parseIntMDN文檔中:

以下示例均返回15:

parseInt(" 0xF", 16)
parseInt(" F", 16)
parseInt("17", 8)
parseInt(021, 8)
parseInt("015", 10)
parseInt(15.99, 10)
parseInt("1111", 2)
parseInt("12", 13)

因此,在您的示例中發生的情況是,您的第一個函數調用正在解釋基數22中的字符“ 34”並返回70,而第二個函數調用正在解釋基數21中的字符“ 34”並返回67。

parseInt有2個論點:1.數字字符串2.基數-數字系統(2到36)

parseInt("50",10);// Decimal equivalant 50
parseInt("10",2); // Binary equivalant 2 
parseInt("50",8); // Octal equivalant 40
parseInt("50",16); // Hexadecimal Equivalant 80

參見上面的示例parseInt("10",2); ,(10)二進制===(2)十進制

參考: MDN DOCS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM