美文网首页
基本类型与引用类型的值

基本类型与引用类型的值

作者: 闪电西兰花 | 来源:发表于2016-10-28 17:01 被阅读0次
    1.基本类型
    • 基本类型指的是简单的数据段,比如5种基本数据类型,都是按值访问的,因此可以直接操作保存在变量中的实际的值
    • 复制基本类型的值时,会创建一个新值,由此变成2个变量,互相独立,互不影响
    var num1 = 9;
    var num2 = num1;
    console.log(num1);             //9
    console.log(num2);             //9
    num2++;
    console.log(num1);             //9
    console.log(num2);             //10;只有num2自己改变了
    
    2.引用类型
    • 引用类型指那些可以由多个值构成的对象;在操作对象时,实际上是在操作对象的引用而不是实际的对象;因此,引用类型的值是按引用访问的
    • 复制引用类型的值时,同样会生成一个新变量,但是新变量复制到的其实是一个指针,指向存储在堆内存中的原来的变量;也就是说,复制结束后,两个变量实际上引用同一个对象,改变其中一个变量,另一个也会受影响
    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Asher";
    console.log(obj2.name);           //Asher;obj1和obj2指向同一个对象
    
    3.两种类型值如何传递参数
    • ECMAScript中所有函数的参数都是按值传递的;也就是说,把函数外部的值复制给函数内部的参数,就和把一个变量复制到另一个变量一样
    • 引用类型的值作为参数传递时,传的是个地址值,或者指针值,不是引用类型本身,赋值给arguments的也一样
    function addTen(num){
        num += 10;
        console.log(num);           //30;经过函数计算的cont
    }
    var cont = 20;
    addTen(cont);
    console.log(cont);            //20;函数外部变量cont依然是20,按值传递,不受影响
    
    function setName(obj){
        obj.name = "Asher";
    }
    var boy = new Object();
    setName(boy);
    console.log(boy.name);       //Asher
    //在这个函数内部,obj和boy引用的是同一个对象
    //即使这个变量是按值传递的,但是obj还是会按引用来访问同一个对象
    
    function setName(obj){
        obj.name = "Asher";
        obj = new Object();          //重新声明obj之后,相当于变成局部对象了,函数执行完之后会被销毁
        obj.name = "Taylor";
        console.log(obj.name);       //Taylor
    }
    var boy = new Object();
    setName(boy);
    console.log(boy.name);         //Asher;boy.name的值依然没变(没变成Taylor)
    //即使在函数内部修改了参数值,原始引用仍然不变
    

    相关文章

      网友评论

          本文标题:基本类型与引用类型的值

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