• js基本语法之 值类型(数据类型)(变量类型)


    一.不可改变的原始值(栈数据)(五个)

    数字(number),字符串(string),布尔值(boolean),undefined,null

    其中;undefined是未定义的意思,而null是空的意思,他们俩的区别在于,null有值,不过这个值是空值,而undefined是未定义,完全没有值的意思。null一般用作占位。

    var a = 4;
    var b = a;
    a = 10;
    console.log(b);//4
    //原始值是把一个值a放到另一个值b里面,改了第一个值a,第二个之值b不变

    二.引用值(堆数据)

    数组(array),对象(object),函数(function)

    注意:只要对变量进行赋值就会进行内存的重新申请

    1.

    var arr = [1, 2];
    var arr1=arr;
    arr.push(3);
    console.log(arr1); //[1, 2, 3]
    //引用值时把第一个值放到第二个值里面,改变第一个值,第二个值也改变
    //引用值是在栈内存里面存放堆的地址,拷贝的是地址,所以改变了arr,实际上是改变了arr指向的地址内存放的内容,而arr和arr1指向同一个地址,故arr1也跟着变

    地址

    变量

    存储值

    0x0001

    arr

    [1,2]    [1,2,3]  <--arr.push(3)

    0x0002

    arr1

    0x0001

    2.

    var arr = [1,2];
    var arr1 = arr;
    arr = [1,3];
    console.log(arr1);//[1,2];    
    //arr = [1,3]实际上是在堆内另建了一个地址,arr指向了新的地址,而arr1还是指向原来的地址,故arr1值不变

    地址

    变量

    存储值

    0x0001

    arr 

    [1,2]   

    0x0002

    arr1

    0x0001

    0x0003

    arr

    [1,3]

    3.要避免使用连续赋值符号:下面举两个例子

    var a = {n:1};
    var b = a;
    a.n= a={m:1};
    console.log(a);//{m:1}
    console.log(b);//{n:{m:1}}

    1.var a = {n:1},在内存中申请两个地址,分别存放a和n;

    2.var b = a;申请一个地址存放b,值指向a的地址;

    3.a.n= a={m:1};

    (1)(这里对变量进行了赋值,因此要重新申请内存)先申请了内存地址n(0x0004)和a(0x0005);由于n值占用了新的内存,故0x0001处 存储值由n:0x0002变为n:0x0004;

    (2)赋值;a={m:1},申请m地址(0x0006),

    因此:a :  {m:0x0006}--->{m:1}

       b: {0x0001}--->{n:0x0004}---->{ n:0x0005}---->{n:{m:0x0006}}--->{n:{m:1}}

    地址

    变量

    存储值

    0x0001

        a  (1)

    n:0x0002  n:0x0004 ---(1)

    0x0002

        -n-  (1)

    1

    0x0003

    b

    0x0001

    0x0004

         n    (1)

    0x0005

    0x0005

         a    (1)

    m:0x0006    (2)

    0x0006

         m    (2)

    1         (2)

    var a = {n:1};
    var b = a;
    a={m:1};//a重新赋值,换了一个房间,b仍然指向原来的房间(地址)
    a.n =a;
    console.log(a);//{m:1,n:{m:1,n:{..}}}//一直循环
    console.log(b);//{n:1}
  • 相关阅读:
    WebServce之Map类型传输
    WebService之跨域
    WebServce之拦截器
    Webservice之发布
    JAVA之ElasticSearch
    MonogoDb学习笔记
    DotNetCore自带Ioc使用程序集名称注入
    生产者与消费者
    哈希算法-Time33
    线程安全的集合操作类
  • 原文地址:https://www.cnblogs.com/freefy/p/9461394.html
Copyright © 2020-2023  润新知