JS 里的數(shù)據(jù)類型轉(zhuǎn)換

為什么要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換?

首先我們知道JavaScript 是一種動(dòng)態(tài)類型語(yǔ)言,變量沒(méi)有類型限制,可以隨時(shí)賦予任意值。
變量的數(shù)據(jù)類型是不確定的,但是各種運(yùn)算符對(duì)數(shù)據(jù)類型是有要求的。
如果運(yùn)算符發(fā)現(xiàn),運(yùn)算子的類型與預(yù)期不符,就會(huì)自動(dòng)轉(zhuǎn)換類型。(這個(gè)時(shí)候就需要各種數(shù)據(jù)類型轉(zhuǎn)換的函數(shù),為了增加語(yǔ)言的便捷性,減少報(bào)錯(cuò))
比如,減法運(yùn)算符預(yù)期左右兩側(cè)的運(yùn)算子應(yīng)該是數(shù)值,如果不是,就會(huì)自動(dòng)將它們轉(zhuǎn)為數(shù)值。

一、轉(zhuǎn)換為數(shù)字number

1、Number()

使用 Number 函數(shù),可以將任意類型的值轉(zhuǎn)化成數(shù)值

  • 數(shù)值:轉(zhuǎn)換后還是原來(lái)的值
    例:Number(324) // 324
  • 字符串:
    如果可以被解析為數(shù)值,則轉(zhuǎn)換為相應(yīng)的數(shù)值
    例: Number('324') // 324
    如果不可以被解析為數(shù)值,返回 NaN
    例: Number('324abc') // NaN
    空字符串轉(zhuǎn)為0
    例: Number('') // 0
  • 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0
    例:
    Number(true) // 1
    Number(false) // 0
  • undefined:轉(zhuǎn)成 NaN
    例: Number(undefined) // NaN
  • null:轉(zhuǎn)成0
    例: Number(null) // 0
2、parseInt()
  • parseInt(string, radix),可多傳入一個(gè)參數(shù) radix(即進(jìn)制),表示傳入 string 的進(jìn)制,默認(rèn)值為10,即十進(jìn)制。始終指定此參數(shù)可以消除閱讀該代碼時(shí)的困惑,并且保證轉(zhuǎn)換結(jié)果可預(yù)測(cè)。
    例:parseInt('123', 5) // 將'123'看作5進(jìn)制數(shù),返回十進(jìn)制數(shù)38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
  • 區(qū)別:Number() 遇到不能無(wú)法轉(zhuǎn)成數(shù)值的字符時(shí),會(huì)直接轉(zhuǎn)換為NaN,而parseInt()逐個(gè)解析字符,直到遇到可轉(zhuǎn)換的字符。
    例:parseInt("FXX12", 10) //返回12
  • 當(dāng)然,如果parseInt 遇到了不屬于radix參數(shù)所指定的基數(shù)中的字符,那么該字符和其后的字符都將被忽略。接著返回已經(jīng)解析的整數(shù)部分。
    例1:parseInt("FXX12XX", 10) // 返回12
    例2:parseInt("546", 2); // 返回NaN,除了“0、1”外,其它數(shù)字都不是有效二進(jìn)制數(shù)字
3、parseFloat()
  • parseFloat() 函數(shù)解析一個(gè)字符串參數(shù)并返回一個(gè)浮點(diǎn)數(shù)。
    parseFloat("3.14"); // 返回3.14
  • 如果在解析過(guò)程中遇到了正負(fù)號(hào)(+或-),數(shù)字(0-9),小數(shù)點(diǎn),或者科學(xué)記數(shù)法中的指數(shù)(e或E)以外的字符,則它會(huì)忽略該字符以及之后的所有字符,返回當(dāng)前已經(jīng)解析到的浮點(diǎn)數(shù).
    parseFloat("314e-2")// 返回3.14;
  • 如果參數(shù)字符串的第一個(gè)字符不能被解析成為數(shù)字,則parseFloat返回NaN。
    parseFloat("FF2")// 返回 NaN
4、黑科技

‘x’ - 0+‘x’,這兩種方法等價(jià)于Number()函數(shù)(因?yàn)檫@種操作會(huì)在內(nèi)部隱性調(diào)用Number()),x不能包含非數(shù)字的字符串。
注意:null轉(zhuǎn)為數(shù)值時(shí)為0,而undefined轉(zhuǎn)為數(shù)值時(shí)為NaN。
null + 1 // 1
undefined + 1 // NaN

二、轉(zhuǎn)換為字符串string

1、string()

String函數(shù)可以將任意類型的值轉(zhuǎn)化成字符串。

  • 數(shù)值:轉(zhuǎn)為相應(yīng)的字符串。
    String(123) // "123"
  • 字符串:轉(zhuǎn)換后還是原來(lái)的值。
    String('abc') // "abc"
  • 布爾值:true轉(zhuǎn)為字符串"true",false轉(zhuǎn)為字符串"false"。
    String(true) // "true"
  • undefined:轉(zhuǎn)為字符串"undefined"。
    String(undefined) // "undefined"
  • null:轉(zhuǎn)為字符串"null"。
    String(null) // "null"
  • String方法的參數(shù)如果是對(duì)象,返回一個(gè)類型字符串;如果是數(shù)組,返回該數(shù)組的字符串形式。
    String({a: 1}) // "[object Object]"
    String([1, 2, 3]) // "1,2,3"
2、toString() 方法
  • .toString()可以將所有的的數(shù)據(jù)都轉(zhuǎn)換為字符串,但是不能轉(zhuǎn)換 null 和 undefined
  • .toString()括號(hào)中的可以寫(xiě)傳入一個(gè)參數(shù) radix,代表進(jìn)制,對(duì)應(yīng)進(jìn)制字符串(默認(rèn)是10),string() 則不行
var t = 8;
t.toString(2);  //1000

需要注意的是不要寫(xiě)成:
1.toString(); //JS會(huì)報(bào)錯(cuò)(Uncaught SyntaxError: Invalid or unexpected token)
因?yàn)閖s會(huì)將1后面的點(diǎn) . 當(dāng)成是小數(shù)點(diǎn),在js眼中就是這樣的,自然會(huì)報(bào)錯(cuò)

1
.toString() 

可以寫(xiě)成
(1).toString();//1 加上括號(hào)就可避免這樣的問(wèn)題
或者 1..toString();

3、黑科技:+ ‘’, JavaScript 遇到預(yù)期為字符串的地方,就會(huì)將非字符串的值自動(dòng)轉(zhuǎn)為字符串。

三、轉(zhuǎn)換為布爾值boolean

1、Boolean函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。

除了以下五個(gè)值的轉(zhuǎn)換結(jié)果為false,其他的值全部為true,這五個(gè)值稱之為 falsy 值。

  • undefined
  • null
  • -0或+0
  • NaN
  • ''(空字符串)

Tips:所有對(duì)象(包括空對(duì)象)的轉(zhuǎn)換結(jié)果都是true,甚至連false對(duì)應(yīng)的布爾對(duì)象new Boolean(false)也是true

2、黑科技
  • !! ‘x’:兩次取反,內(nèi)部調(diào)用的也是Boolean函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,616評(píng)論 0 13
  • 前言:之前的博客介紹了JS中的各種數(shù)據(jù)類型,那么可不可以把已經(jīng)確定的數(shù)據(jù)類型轉(zhuǎn)換成其他的數(shù)據(jù)類型呢?本文就將介紹一...
    EnochQin閱讀 640評(píng)論 0 3
  • 數(shù)據(jù)類型的轉(zhuǎn)換可分為強(qiáng)制轉(zhuǎn)換和自動(dòng)轉(zhuǎn)換。 強(qiáng)制轉(zhuǎn)換 強(qiáng)制轉(zhuǎn)換主要指使用Number、String和Boolean三...
    饑人谷_sunny閱讀 300評(píng)論 0 0
  • 內(nèi)容: 類型轉(zhuǎn)換 五個(gè)falsy值 內(nèi)存圖 垃圾回收 深淺拷貝 強(qiáng)制轉(zhuǎn)換 一. 任意類型轉(zhuǎn)Number 五種...
    加油吧_閱讀 235評(píng)論 0 0
  • 一切皆文件幾乎把所有的資源系統(tǒng)抽象為文件形式:包括硬件設(shè)備,甚至通信接口等 由眾多功能單一的程序組成:一個(gè)程序只做...
    香吉矢閱讀 261評(píng)論 0 0

友情鏈接更多精彩內(nèi)容