美文网首页
数据转换,以及内存图的几个概念

数据转换,以及内存图的几个概念

作者: 吴一晏 | 来源:发表于2019-02-21 18:22 被阅读0次

    1.类型转换
    1.1转成string
    ①:toString
    语法:a.toString() a可以是数字,可以是对象,但是不能是null和undefined。这里说一下对象
    用这种方法转的字符串显示是如下图


    1550738683(1).jpg

    ②:全局函数 String
    语法 String(a) a在这也可以是null和undefined


    2.jpg
    ③:a + ''
    这方法和String 功能相同,但是写起来更方便。

    1.2.转成Boolean
    ①:全局函数Boolean
    语法:Boolean()
    ②:在引用前面加!!
    比如!!1
    转成Boolean时候:数字里只有0和NaN结果是false;字符串里只有空字符串是false;null和
    undefined是false;对象全是true。
    所以0,NaN,null,undefined,空字符串这五个被称为falsy值。

    1.3转成Number
    ①:全局函数Number
    语法:Number('1')
    ②:parseInt
    语法:parseInt('1',10) 这表明是转换成十进制的数字,还可以是八进制,十六进制。
    这方法会把能转的数字都转过来,比如parseInt('1t') 结果显示为1
    ③:parseFloat
    讲给定的值转换成浮点数,转换不了则返回一个NaN。
    ④:-0
    '1'-0 结果为1, '1.23'-0 结果为1.23
    ⑤:取正
    注意取正不是取绝对值。如图:


    3.jpg

    2.内存图
    数据在存入内存的时候,简单数据是直接存放在stack(栈)里面(数字是64位,字符是16
    位),复杂数据是以地址的形式存放在Heap(堆)里,stack只是做一个引用。如图:


    4.jpg

    那么画内存图有啥用呢?举个例子:一道面试题


    1.jpg
    第一句和第二句,只是简单的赋值,会在Heap里生成一个地址比如100,里面有{n:2}。a和b
    在stack存储的分别指向这个地址adds100.
    2.jpg
    第三句a.x = a = {n:2}相当于 var a = {n:2}; a.x = a; 指定了个新的key-value{x:a}\(a={n:2})

    加入到a里面。并且生成一个新的地址101,内容是{n:2}存放在heap里,并且将它赋值给a。
    内存图变成:


    3.jpg
    所以alert(a.x)为undefined。alert(b.x)为[object,Object]。

    3.垃圾回收
    如果一个对象没有被引用,那么它就是垃圾,将被回收。比如地址100和地址101,a和b全引
    用的地址101,地址100就是垃圾。

    4.深拷贝和浅拷贝
    基本类型里,赋值全都是深拷贝。
    对象中,假如改变b导致a改变,那么就叫浅拷贝。
    假如赋值b,使b指向另一块内存,但是b和a的内容又是一模一样,就叫深拷贝。

    相关文章

      网友评论

          本文标题:数据转换,以及内存图的几个概念

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