美文网首页
值类型(Value Types)与引用类型(Reference

值类型(Value Types)与引用类型(Reference

作者: SingleDiego | 来源:发表于2019-05-22 09:08 被阅读0次

    Javascript 中有两种基本数据类型;值类型(Value Types)引用类型(Reference Types)

    值类型包括:

    • Number
    • String
    • Boolean
    • Symbol
    • undefined
    • null

    引用类型包括:

    • Object
    • Function
    • Array

    值类型和引用类型有什么区别,请看下面例子:

    let x = 10;
    let y = x;
    x = 20;
    

    我们现在检验下 x 和 y 分别是什么值:

    x
    >>> 20
    
    y
    >>> 10
    

    可见 x 和 y 是相互独立的。当把 x 赋值给 y 的时候,只是把 x 的值复制给了变量 y。

    下面我们来试试使用引用类型会发生什么。

    let x = { value: 10 };
    let y = x;
    x.value = 20;
    

    检验 x 和 y 的值:

    x
    >>> {value: 20}
    
    y
    >>> {value: 20}
    

    可见,当我们修改了 x 对象后 y 对象也会相应变化。因为 x 和 y 变量只是指向了对象的内存地址。当我把 x 赋值给 y 的时候,只是让 y 也指向了相关对象。

    总结来说:值类型复制值,对象的引用类型复制引用。

    再看下一个例子:

    let number = 10;
    
    function increase(number) {
      number++
    };
    
    increase(number);
    console.log(number);
    
    // 执行结果:
    10
    

    值类型 number 传入到函数 increase 时,只是复制了它的值给函数的本地参数,所以函数的执行并不会改变 number。

    下面再看看使用引用类型:

    let number = { value: 10 };
    
    function increase(number) {
      number.value++
    };
    
    increase(number);
    console.log(number);
    
    // 执行结果:
    // {value: 11}
    

    当对象作为参数传递给函数时,是以引用的方式传递的。函数内的参数 number 和 外面的 number 指向了同一个对象。所以函数内修改 number 会使函数外的 number 也改变。

    相关文章

      网友评论

          本文标题:值类型(Value Types)与引用类型(Reference

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