美文网首页Web前端之路让前端飞
JavaScript中基本类型和引用类型的值

JavaScript中基本类型和引用类型的值

作者: baiying | 来源:发表于2017-07-24 11:41 被阅读24次

    JavaScript中包含两种数据类型的值:基本类型和引用类型

    定义

    • 基本类型:简单的数据段
    • 引用类型:可能由多个值构成的对象

    访问方式

    • 基本类型:按值访问,因为可以操作保存在变量中实际的值
    • 引用类型:引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,所以在操作对象时是在操作对象的引用而不是实际的对象,故是按引用访问的.

    动态属性

    可以为引用类型动态地添加属性,但是基本类型不可以,虽然不会出错,但不会为其添加上属性.

    let obj = new Object();
    obj.name = "tom";
    let name = 'person';
    person.age = 12;
    alert(obj.name); //tom
    alert(name.age); // undefined
    

    复制变量的值

    基本类型复制:
    会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,复制完成后num1和num2完全独立,各自的任何操作都不会影响对方

    let num1 = 5;
    let num2 = num1;
    num2 ++;
    alert(num1);//5
    alert(num2);//6
    

    引用类型复制
    当从一个变量到另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放到新变量分配的位置上,但是这个值的副本是一个指针,复制结束后,两个指针指向存储在堆中的同一个对象,因此一个的操作会直接影响另一个.

    let obj1 = new Object();
    let obj2 = obj1;
    obj1.name = 'tom';
    alert(obj2.name);//tom
    

    传递参数

    ECMAScript中所有函数的参数都是按值传递.即使引用类型是按引用访问,但在参数传递时依然是按值传递.
    可以把函数的参数想象成局部变量.

    检测类型

    typeof:确定一个变量是字符串,数值,布尔值,还是undefined.但如果测一个引用类型或者NULL我们只会得到object,为了确定一个引用类型到底是哪种引用类型,我们会用instanceof

    let a = 'haha';
    let b = new Object();
    let c = null;
    let d = [1,2];
    alert(typeof a);//string
    alert(typeof c);//object
    alert(b instanceof Object); //true
    alert(d instanceof Array); //true
    

    存储位置

    基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中.
    引用类型的值是对象保存在堆内存中.

    相关文章

      网友评论

        本文标题:JavaScript中基本类型和引用类型的值

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