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

內(nèi)容: 類型轉(zhuǎn)換 五個falsy值 內(nèi)存圖 垃圾回收 深淺拷貝

強制轉(zhuǎn)換

一. 任意類型轉(zhuǎn)Number

五種方法

  1. Number(x)
  2. parseInt(x, 10)
  3. parseFloat(x)
  4. x - 0
  5. +x

轉(zhuǎn)換規(guī)則 參數(shù)是 基本類型 和 對象時是不同的

基本類型

  • 數(shù)值 : 不變
  • 字符串: 能解析為數(shù)字 Number(''324) //324
    不能解析位數(shù)字 Number('324abc') //NaN
    空字符串 Number('') //0
  • 布爾值 : true //1 false //1
  • undefined : NaN Number(undefined) // NaN
  • unll : 0 Number(null) //0

對象 : NaN

           Number({a;1})  //NaN
          Number([1,2,3])     //NaN
      除非是包含單個數(shù)值的數(shù)組    Number([5])  //5

二. 任意類型轉(zhuǎn)String

三種方式

    1. String(x)
    1. x.toString()
    1. ' ' + x 芳芳推薦**

數(shù)值 : 相應(yīng)字符串 123 //'123'

  • 字符串: 不變
  • 布爾值:true > "true" false > "false"
  • undefined : "undefined"
  • null : "null"
  • object對象:如果是對象,返回一個類型字符串 ; //"[object object ]"
  • 如果是數(shù)組,返回數(shù)組的字符串形式。
  • String({a: 1}) // "[object object]"
  • String([1,2,3]) // '1,2,3'

#三. 任意類型轉(zhuǎn)布爾Boolean
兩種方法

    1. Boolean(x)
    1. !! x 芳芳推薦

五個falsy值,其他都是True

NaN null undefined 0(正負) ' ' (空字符串)

所有的對象全部都是true

自動轉(zhuǎn)換 以強制轉(zhuǎn)換為基礎(chǔ)

以下三種情況,JavaScript 會自動轉(zhuǎn)換數(shù)據(jù)類型,即轉(zhuǎn)換是自動完成的,用戶不可見

  • 1.不同類型的數(shù)據(jù)互相運算
    1. 對非布爾值類型的數(shù)據(jù)求布爾值
  • 3.對非數(shù)值類型的值使用一元運算符(即+和-)
    建議在預(yù)期為布爾值、數(shù)值、字符串的地方,全部使用Boolean、Number和String函數(shù)進行顯式轉(zhuǎn)換。

一. 自動轉(zhuǎn)換為數(shù)值

除加法運算符,其他運算符都會把運算轉(zhuǎn)為數(shù)值。

'5'-'2'  // 3            '5' * []  // 0      '5'  * '2'  //10
false/ '5'   // 0      true -'1' //0     'abc' - 1//NaN
false - 1 //-1       '1' - 1  // 0          undefined + 1  // NaN   
unll + 1 //1     + 'abc'  // NaN     - "abc"  //NaN

二 . 自動轉(zhuǎn)換為布爾值 Boolean

條件部分轉(zhuǎn)為布爾

五個falsy

undefined NaN null 0 ' '
方法 : ① !!X (推薦) ②Boolean(x)

三.自動轉(zhuǎn)為字符串

自動轉(zhuǎn)換主要發(fā)生在字符串的加法運算中

方法

  • 1 ' ' + x(芳芳推薦)
  • 2 window .String()
  • 3 x.toString()

深復(fù)制是什么鬼

var a = 1
var b = a
b = 2 //這個時候改變 b
a 完全不受 b 的影響
那么我們就說這是一個深復(fù)制
對于簡單類型的數(shù)據(jù)來說,賦值就是深拷貝。
對于復(fù)雜類型的數(shù)據(jù)(對象)來說,才要區(qū)分淺拷貝和深拷貝。

這是一個淺拷貝的例子

var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true

因為我們對 b 操作后,a 也變了

什么是深拷貝了,就是對 Heap 內(nèi)存進行完全的拷貝。

var a = {name: 'frank'}
var b = deepClone(a) // deepClone 還不知道怎么實現(xiàn)
b.name = 'b'
a.name === 'a' // true

內(nèi)存圖 與 垃圾回收

轉(zhuǎn)換1.jpg
轉(zhuǎn)換2.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,616評論 0 13
  • 類型轉(zhuǎn)換1. 轉(zhuǎn)換為 字符串toString() 方法返回一個表示該對象的字符串 MDN語法:object.toS...
    半齋閱讀 335評論 0 0
  • JS里的類型 類型轉(zhuǎn)換 基本類型number string boolean symbol null undefin...
    鷓鴣少閱讀 306評論 0 0
  • 1 荒村生斷靄,古寺語流鶯。 建龍三年,農(nóng)歷七月十四日,在華州一個叫下奎的小山村,一聲響亮的啼哭從一所農(nóng)家小院傳出...
    逍遙一郎閱讀 692評論 1 5
  • 好久都沒有早上起來跑步了。還是起這么早的。跑完之后感覺還不錯。等軍訓(xùn)完了,要繼續(xù)跑,不過就不是起這么早了。 大家繞...
    小小黑豬閱讀 179評論 0 0

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