美文网首页
值类型(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