前端之路

JS数据类型深入

2018-08-17  本文已影响0人  李不远

各类型转换

变string方法.

  1. toString()如表所示
var a = 1
a.toString()        //'1'
var b = null
b.toString()        //报错
var c = undefined
c.toString()        //报错
var d = true
d.toString          //'true'
  1. 需要转义的数据 + '',可以变成字符串
1 + ''          //'1'
true + ''       //'true'
null + ''       //'null'
undefined + ''  //'undefined'
obj + ''        //[object Object]
  1. window.String().结果与上种方法相同

布尔值

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. 六个falsy值: falsy是在Boolean上下文中认定可转换为false的值.

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

数字

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

关于内存

数字为64位

字符为16位

JS的内存存储分为Stack栈内存和Heap堆内存

  1. 普通的数据按照顺序存储在Stack栈内存里

  2. 对象内的数据按照无序存储在Heap堆内存,存在Stack中的是一个地址

  3. 等于号只做一件事情,把一个数据拷贝到另一个数据

    一下是一个示意图。不会的时候,就画图!不会的时候,就画图!!不会的时候,就画图!!!

关于循环引用

var a = {self:a}
a.self                  //undefined   由于变量提升不能循环引用

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

引用类型

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

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

垃圾回收

如果一个对象没有被引用,它就是垃圾,将被回收

var a = {name:'a'}
var b = {name:'b'}
a = b                       //{name:a}将会被回收
var fn = function(){}
document.body.onclick = fn
fn = null          //此时的function(){}并不是垃圾

内存泄漏:由于IE9之前的浏览器存在的垃圾回收机制的问题。会导致一些元素无法被销毁。

解决办法:将需要回收的元素和数据设置为null

深拷贝与浅拷贝

基本类型在赋值的时候都是深拷贝

深拷贝是更改了Heap里的内容,所以Stack里的其他与之相关的内容会一起改变。

var a = 1
var b = a
b = 2

a = 1           //b变不影响a。此为深拷贝

浅拷贝就是Heap的内容增加了拷贝项,所以不会影响到Stack里与之相关的内容。

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

a.name = 'b'    //b变了a也变。此为浅拷贝

总结:深拷贝其实就是要拷贝Heap中的内容

——远方不远

上一篇 下一篇

猜你喜欢

热点阅读