美文网首页
js数据类型(二)

js数据类型(二)

作者: 阿龙哟 | 来源:发表于2018-10-09 11:07 被阅读0次

    类型转换

    number string boolean null undefined symbol object

    转换成字符串

    number:toString
    boolean:toString
    null:toString 报错
    undefined:toString 报错
    object:toString [object Object]

    老司机转成字符串

    1.+'' 加一个空字符串
    例如:1+'' true+'' obj+''
    2.调用全局方法
    window.String(obj)

    转换成布尔值

    利用Boolean()函数
    注意:Boolean({})true

    老司机转换成布尔值: !! 两个!

    !!{} !!null

    五个特殊值 falsy值:
    1.0 false NaN false
    2.'' false
    3.null false
    4.undefined false

    数组函数都是true

    如何转为number

    '1' => 1 :

    1. Number('1') ===1
      2.parseInt('1',10) === 1
      3.parseFLoat('1.23') === 1.23
      4.'1'-0 ===1
      5.+'1' === 1

    parse: 解析

    eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。

    内存图:

    内存一旦断电,数据丢失,速度快
    ssd固态硬盘

    js分为两块区域
    代码区、数据区

    数据区又分为stack栈内存和Heap堆内存

    image.png

    先变量提升:

    js数字都是以64位浮点数的形式储存的,每一个字符是16位,一行可以存4个字符

    对象数据存在栈里面,要是突然要临时加一个数据,会让原来对象下面的数据都往下排,这就会导致速度非常的慢,所以在栈里面存的是地址,指向堆里面的内存

    image.png image.png

    变量和对象之间的关系:引用

    四个内存题目:

    var a = 1
    var b = a
    b = 2
    请问 a 显示是几?  a=1
    
    var a = {name: 'a'}
    var b = a
    b = {name: 'b'}
    请问现在 a.name 是多少?a.name = 'a'
    
    var a = {name: 'a'}
    var b = a
    b.name = 'b'
    请问现在 a.name 是多少?a.name = 'b'
    
    var a = {name: 'a'}
    var b = a
    b = null
    请问现在 a 是什么?a={name:'a'}
    

    记住画内存图,只改变栈里面的东西,不覆盖堆内存里面的东西,最多增加一条或多条属性

    var a = {self:a} 结果为什么是undefined


    image.png

    首先变量声明var a, 然后开辟一块内存存储{self:a},此时a没有值undefined,然后把这块内存的地址赋给a

    面试题

    image.png

    a此时地址为55,没有x,所以是undefined
    b指向54,b.x是ADDR54指向的是一个对象,调用toString方法,结果是
    [object Object]

    垃圾回收

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

    image.png image.png

    fn=null 此时,function并不是垃圾,虽然断了一根链接,但是还有其他的链接


    image.png

    浅拷贝和深拷贝

    var a = 1
    var b = a
    b = 2 //这个时候改变 b
    a 完全不受 b 的影响
    那么我们就说这是一个深复制
    对于简单类型的数据来说,赋值就是深拷贝。
    对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。

    这是一个浅拷贝的例子

    var a = {name: 'frank'}
    var b = a
    b.name = 'b'
    a.name === 'b' // true
    因为我们对 b 操作后,a 也变了

    什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。

    var a = {name: 'frank'}
    var b = deepClone(a) // deepClone 还不知道怎么实现
    b.name = 'b'
    a.name === 'a' // true

    相关文章

      网友评论

          本文标题:js数据类型(二)

          本文链接:https://www.haomeiwen.com/subject/rwcsaftx.html