JS數(shù)據(jù)類(lèi)型深入

各類(lèi)型轉(zhuǎn)換

變string方法.

  1. toString()如表所示
var a = 1
a.toString()        //'1'
var b = null
b.toString()        //報(bào)錯(cuò)
var c = undefined
c.toString()        //報(bào)錯(cuò)
var d = true
d.toString          //'true'
  1. 需要轉(zhuǎn)義的數(shù)據(jù) + '',可以變成字符串
1 + ''          //'1'
true + ''       //'true'
null + ''       //'null'
undefined + ''  //'undefined'
obj + ''        //[object Object]
  1. window.String().結(jié)果與上種方法相同

布爾值

1.Boolean()

Boolean(1)          //true
Boolean(0)          //false
Boolean('hello')    //true
Boolean({})         //true
Boolean(false)      //false
  1. !!
!! null         //false
!! undefined    //false
!! ''           //false
!! ' '          //true
!!NaN           //false
  1. 六個(gè)falsy值: falsy是在Boolean上下文中認(rèn)定可轉(zhuǎn)換為false的值.

0,NaN,unll,undefined,'',false

數(shù)字

Number('1')                     //1
parseInt('1',10)                //1 
parseFloat('1.23')              //1.23
'1'-0                           //1     
+'-1.23'                        //-1.23

關(guān)于內(nèi)存

數(shù)字為64位

字符為16位

JS的內(nèi)存存儲(chǔ)分為Stack棧內(nèi)存和Heap堆內(nèi)存

  1. 普通的數(shù)據(jù)按照順序存儲(chǔ)在Stack棧內(nèi)存里

  2. 對(duì)象內(nèi)的數(shù)據(jù)按照無(wú)序存儲(chǔ)在Heap堆內(nèi)存,存在Stack中的是一個(gè)地址

  3. 等于號(hào)只做一件事情,把一個(gè)數(shù)據(jù)拷貝到另一個(gè)數(shù)據(jù)

    一下是一個(gè)示意圖。不會(huì)的時(shí)候,就畫(huà)圖!不會(huì)的時(shí)候,就畫(huà)圖?。〔粫?huì)的時(shí)候,就畫(huà)圖?。?!

關(guān)于循環(huán)引用

var a = {self:a}
a.self                  //undefined   由于變量提升不能循環(huán)引用

var a ={}
a.self = a
a.self.self       //self{self:{...}}

引用類(lèi)型

var a = {n:1};
var b = a;
a.x = a = {n:2};

alert(a.x);     //undefined
alert(b.x);     //[object Object]

垃圾回收

如果一個(gè)對(duì)象沒(méi)有被引用,它就是垃圾,將被回收

var a = {name:'a'}
var b = {name:'b'}
a = b                       //{name:a}將會(huì)被回收
var fn = function(){}
document.body.onclick = fn
fn = null          //此時(shí)的function(){}并不是垃圾

內(nèi)存泄漏:由于IE9之前的瀏覽器存在的垃圾回收機(jī)制的問(wèn)題。會(huì)導(dǎo)致一些元素?zé)o法被銷(xiāo)毀。

解決辦法:將需要回收的元素和數(shù)據(jù)設(shè)置為null

深拷貝與淺拷貝

基本類(lèi)型在賦值的時(shí)候都是深拷貝

深拷貝是更改了Heap里的內(nèi)容,所以Stack里的其他與之相關(guān)的內(nèi)容會(huì)一起改變。

var a = 1
var b = a
b = 2

a = 1           //b變不影響a。此為深拷貝

淺拷貝就是Heap的內(nèi)容增加了拷貝項(xiàng),所以不會(huì)影響到Stack里與之相關(guān)的內(nèi)容。

var a = {name:a}
var b = a
b.name = 'b'

a.name = 'b'    //b變了a也變。此為淺拷貝

總結(jié):深拷貝其實(shí)就是要拷貝Heap中的內(nèi)容

——遠(yuǎn)方不遠(yuǎn)

?著作權(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)容

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