JavaScript Day 4. ParseInt / ToString

ParseInt()

直到我在写这篇之前,parseInt 在我心中都还是一个很简单的概念,一个可以把字串变成数字的函数。

// 把字串转成数字的型别
let a = "1";
a = parseInt("1");
console.log(a+1); // 1

一直没有好好思考 parseInt 由字串转成数字的原理是什麽,我把这个转型的过程想得很简单,反正我不论输入什麽字串,它就是照本宣科的转成数字,没有想到那如果我输入的是文字字串呢,它又会怎麽帮我转成数字或会变成什麽?

於是我决定好好的把 parseInt 笔记下来,也希望自己以後学到任何一个函式,都能够更多的去思考他们的原理。

parseInt() 函数解析一个字串并回传一个整数。

一般来说,只要是数字都能转型,不过要透过 parseInt 转型,即使是数字仍然是有规则的。

parseInt(string, radix);

参考 MDN 的说法,简单解释这规则里面 string 以及 radix 的意思:

  • string

    将要转成数字的字串。例外的情况是,如果此时 string 不是字串,就会先经过 ToString 再执行 parseInt,如果是空白值则会被忽略。

  • radix (基数)

    代入数字为 2 到 36,代表二进位、八进位、十进位或十六进位,譬如指定 10 就代表十进位,一定要定义这个参数,避免给出的结果因实做不同而产生变化,通常预设不是 10 进位,因此如果 radix 为 0 或没有设置参数的时候则会根据 string 做判断。

以下范例作参考:

parseInt("10"); // 10
parseInt("19",10); // 19 (10+9)
parseInt("11",2); // 3 (2+1)
parseInt("17",8); // 15 (8+7)
parseInt("1f",16); // 31 (16+15)
parseInt("010"); // 10

此外,如果字串第一个字不能转换成数字,那麽会直接出现NaN的结果。

parseInt("Hello", 8); // NaN

ToString()

ToString() 函数解析一个数字并回传一个字串。

上面我们提到 parseInt 将字串转成数字并回传,那麽如何再把数字转回字串?底下一样提供一个简单的范例:

// 数字改成字串的型别
let b = 1;
b = b.toString();
console.log(typeof b); // 即显示string
console.log(b+1);

ToString 的转型规则

number.toString(radix)

radix 代入的数字介於 2-36 的整数,代表进位,预设为10。

参考的范例,大盖可以了解到 ToString 将数字转回字串同样使用进位的方式。

let count = 10;
count.toString()  // '10' 预设
(17).toString()   // '17'
(17.2).toString() // '17.2'

let x = 6;

x.toString(2)      // '110' 二进位表示法
(254).toString(16) // 'fe' 十六进位表示法

(-10).toString(2)   // '-1010'
(-0xff).toString(2) // '-11111111'

要注意,当对象不是数字的时候会抛出 Error。

参考 ToString 各个使用方法 (返回物件的字串表示):

  • Array - 将 Array 的元素转换为字串。

  • Boolean - 如果 Boolean 值是 true,则回传 true,否则回传 false。

  • Date - 返回日期的文字表示法。

  • Error - 将包含相关错误讯息的数字转为字串。

  • Function - 返回如下格式的字串。

    // unctionname 是被呼叫 toString 方法函式
    function functionname( ) { [native code] }
    
  • Number - 将数字回传字串。

  • String - 返回 String 物件的值。

    String 为字串,规则为:

    // thing 为任何要转字串的物件
    String(thing)
    

<<:  [Day13] 文本/词表示方式(四)-共现矩阵与降维

>>:  [Angular] Day13. Built-in directives - attribute

[Day24]C# 鸡础观念- 物件导向(oop)~建构方法(Constructor)

老板我要一个猪排汉堡, 不要番茄,不要小黄瓜, 洋葱加量,加起司, 现实生活中,我们常常会在点餐时跟...

【少女人妻的30天Elastic】Day 27 : App Search_API 介绍与应用_Search Settings

Aloha!又是我少女人妻 Uerica!这个连假又过了一场奇幻旅程,交了两个好朋友,心得是原来我...

RestTemplate实作(一)(Day11)

在串接API之前我们还有一个重要的设定要做,我们必须先汇出证交所网站的SSL证书,并加入到JAVA的...

并行程序的潜在问题 (三)

在介绍 Mutex lock 与 Spinlock 後,本篇文章同样针对并行程序的 Synchron...

Day-27 Excel的count家族

今日练习档 ԅ( ¯་། ¯ԅ) 今天要与大家介绍COUNT家族,包含COUNT、COUNTA、CO...