每种语言数据类型是最基础的东西了,今天被javascript的基本类型和引用类型搞晕,主要是在函数中的传递,所有数据都是按照“值”来传递的。
刚开始看到李松峰老师 翻译的 《JavaScript 高级程序设计 第二版》中第四章介绍,传递参数,(函数传递参数)都是按照值来传递。这里并不说所有情况都是按照值来传递。对于引用类型数值还是按照引用地址来传递。
javascript的数据类型
值类型:数值、布尔值、null、undefined。
引用类型:对象、数组、函数。
这里插入一个个人对值的引用和地址引用的理解。
假如在我的书架上有很多本书,一个朋友找我来借书。
第一种方法:我告诉他的书的名字《失控》,这是一本不错的书。你自己去书架上找吧。-- -- --固定值的引用
第二种方法:我告诉他第三排第8本(这是一个地址),你去拿。-- -- --按照地址的引用
图中A:对应第一种方法,当告诉了b的书名为1这个值之后,这时候a变量可以任意去改变书架上的书。a会被赋值,但是b依然会取得1这个值。
图中B对应第二种方法,只是告诉了b的一个地址,(数组属于引用类型)赋值时只是传递了一个地址。取中间第一排的三本,但是在这之前a来了,将一本书《javascript权威指南》插入到了中间的最前面,这是b再按照这个地址取书,就会发生变化了。
===================================
此时,基本类型和引用类型的引用应该能够理解了吧。
看下面例子;
++++基本类型++++
var a = 3.14; //声明并初始化一个变量
var b = a; //把该变量复制到一个新变量
a = 4; //修改原始变量的值
alert(b); //显示3.14;副本没有改变
++++引用类型++++
var a = [1,2,3]; //初始化一个引用数组的变量
var b = a; //把该引用复制到一个新变量
a[0] = 100; //用原始引用修改数组
alert(b); //新引用显示改变后的数组[100,2,3]
++++++++++++++++++++++++++++最后一个比较难缠问题String
字符串是基本数据类型,String对象是引用类型,基本数据类型字符串在进行对象操作时会临时转化为String对象,
所以会出现令人费解的情况,而JS String对象和其他对象一样只是普通的引用。
记住一点:string对象是引用类型,但是是按照值的传递方式计算。
JavaScript 的函数传递参数是值传递?还是值传递?对就是值传递……
avaScript 函数传递参数时,是值传递。虽然您可能不信,因为ECMAScript 变量可能包含两种不同数据类型的值:基本数据类型,和引用数据类型。难道引用数据类型传递的时候难道也是值传递吗?答,没错。
具体介绍参考:http://www.xiaoxiaozi.com/2010/03/05/1719/