美文网首页
js值类型和引用类型

js值类型和引用类型

作者: pretty_rain | 来源:发表于2019-06-04 16:19 被阅读0次

1.值类型

存储在栈区的数据,无法添加、删除属性,如果直接赋值给另一个变量,两个变量互不影响,修改其中任意一个变量的值,都对另一个变量的值无影响。

    var num = 1;
    var ab = num.toFixed(2);
    var str = '1111';
    var un = undefined;
    console.log(ab)
    console.log(toString.call(num));
    console.log(toString.call(str));
    console.log(toString.call(un));
    console.log(toString.call(true));

2.引用类型

引用类型的值储存再堆区,再栈区数据的引用地址。如果直接赋值给另一个变量,其实是把数据的存放地址拷贝给了另一个变量, 共享一个地址,共用一份数据,任何一方更改数据,都会导致另一方数据发生改变

    var arr = [];
    var data = {};
    var nul = null;
    function Product(){}
    var product = new Product();
    console.log(toString.call(product));
    var num = new Number(10);
    console.log(toString.call(num));

3.引用类型的深拷贝和浅拷贝

<script>
    /*浅拷贝*/
    var a = {
        name :  "xiaoming",
        data :{
            age:2,
            sex:"男"
        }
    }
    var b = {};
    qian(a,b);
    function qian(a,b){
        for(var i in a){
            b[i] = a[i];
        }
    }
    console.log(b.name);
    console.log(b.data.age);
    a.name="xiaohua";
    a.data.age=3;
    console.log(b.name);
    console.log(b.data.age);
    console.log("---------------------------------------")
    /*深拷贝*/
    var c = {
        name :  "xiaoming",
        data :{
            age:2,
            sex:"男"
        }
    }
    var d = {};
    shen(c,d);
    function shen(c,d){
        for(var i in c){
            if(toString.call(c[i])=="object Object"){
                 shen(c[i],d[i]);
            }else {
                d[i]=c[i];
            }
        }
    }
    console.log(d.name);
    console.log(d.data.age);
    a.name="xiaohua";
    a.data.age=3;
    console.log(d.name);
    console.log(d.data.age);
</script>

4.关于引用类型赋值题

<script>
    var a = {"x": 1};
    var b = a;
    a.x = 2;
    console.log(b.x);  //2
    /*解析*/
    /*将a赋值给b b中保存的只是地址,也就是a变量,b变量指向同一个对象*/
    /*修改a.x 同时也修改了b.x - 以为修改的都是同一块内存区域*/
    
    a = {"x":3};
    console.log(b.x);
    /*解析*/
    /*这里又定义了一个新的对象,重新分配内存空间,这个时候a变量中存储的是新地址,而b还是指向老对象*/
    /*所以这里b.x还是2*/
    
    a.x = 4;
    console.log(b.x);
    /*解析*/
    /*a b这个时候分别指向不同的对象,所以修改a不会影响b*/
    /*所以这里b.x还是2*/
</script>

相关文章

  • js变量的类型和计算

    js变量类型:值类型和引用类型值类型:number,string,boolean,undefined,symbol...

  • js基本类型与引用类型

    1.js基本类型和引用类型 首先js的变量有两种类型,基本类型值和引用类型值 基本数据类型:null,undefi...

  • [JavaScript] F.prototype=1

    js是区分引用类型和值类型的值类型:数值,布尔值,null,undefined引用类型:对象,数组,函数 (1)如...

  • 引用类型和对象拷贝

    一、引用类型有哪些?非引用类型有哪些 JS 中分基本类型和引用类型。 基本类型值(数值、布尔值、字符串、null和...

  • JS 基础知识巩固(JS面试宝典-全面透彻)

    第一章:JS 基础上篇(js 类型) 值类型 引用类型 问题:为什么对值类型和引用类型进行修改会出现不同的结果呢?...

  • JS中实现浅拷贝和深拷贝

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中...

  • JS基础知识 (一)--变量类型和计算

    变量类型 js变量类型分为基本类型(或者叫值类型)和引用类型。(按照存储方式区分)• 值类型值类型:Number、...

  • JS基本类型和引用类型

    JS中可以把变量分成两部分,基本类型和引用类型。 JavaScript值类型和引用类型有哪些(1)值类型:数值、布...

  • 深浅拷贝

    JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会进...

  • JS值类型和引用类型

    1.值类型(基本数据类型) 值类型是存储在栈(stack)中的简单数据,存储在变量处的就是指 2.引用类型 其实a...

网友评论

      本文标题:js值类型和引用类型

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