JavaScript 中基本数据类型和引用类型的区别

大多数人系统学习过的程序设计语言,大概主要是在C/C++, Java,C#这些范畴里面,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别,以及函数调用的时候,参数到底是被作为值传递,还是作为引用传递,在函数内部的修改能否反映到函数外部等。相反在 JavaScript 中,这个同样需要搞清楚的话题却往往容易被忽视(或者根本没被意识到)。

下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别。

基本数据类型

  • Number: 15, 3.14
  • Boolean: true, false
  • String: "Hello, World"
  • null
  • undefined

基本数据类型是不可变的(immutable)

这里的 toUppderCase() 只会返回一个新的字符串,而不会改变 name 本身的值,也就是不可变的意思。

基本数据类型使用值(value)的方式进行比较

基本数据类型使用值(value)的方式进行传递

引用类型

  • Object
  • Array
  • Function

引用类型是可变的(mutable)

引用类型通过引用(reference)进行比较

引用类型通过引用(reference)方式进行传递

注意下面这段代码:去引用之后将不能再修改原来的值

那么如果我们想要一个引用类型的拷贝怎么办?

拷贝数组


注意:这里并不会拷贝被引用的对象,也就是说这不是一个深度拷贝。

拷贝对象

小结

基本数据类型:不可变,按值比较,传值;
引用类型:可变,按引用比较,传址;

参考:http://www.rogerharford.com
有关“浅拷贝,深拷贝”,请参考: http://www.css88.com/archives/4818
有关 jQuery.extend 的用法,请参考 jQuery API Document: http://api.jquery.com/jQuery.extend/

回复