1,“ECMAScript变量可能包含两种不同的数据类型:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象。”
var o=new Object();
o.name="李雷";
o.age=23;
window.console.info(o.name+ o.age);
2,在很多语言中,字符串以对象的形式表示,因此被认为是引用类型的,js则放弃了这一传统。
3,“当从一个变量向另一个变量赋值引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值的副本”实际上是一个空指针,而这个指针指向存储在堆中的一个对象。赋值操作结束后,两个变量实际上将引用同一个对象。”
var obj1=new Object();
var obj2=obj1;
obj1.name="nick";
window.console.info("obj2.name的值:"+obj2.name);
4,js中函数的参数都是按值传递的。
function addTen(num){
num +=10;
return num;
}
var count=20;
var result=addTen(count);
window.console.info(count);
window.console.info(result)
这里的函数addTen()有一个参数num,而参数实际上是函数的局部变量。在调用这个函数时,变量count作为参数被传递给函数,这个变量的值是20。于是,数值20被复制呗参数num以便在addTen()中使用。在函数内部,参数num的值被加上了10,但这一变化不会影响函数外部count变量。参数num与变量count互不认识,他们仅仅是具有相同的值。加入num是按引用传递的话,那么变量count的值也将变成30,从而反映函数内部的修改。但是事实上count输出的值仍旧为20,所以说,js中的函数的参数是按照值来传递的。
function setName(obj){
obj.name="lucy";
obj=new Object();
obj.name="tom";
}
var person=new Object();
setName(person);
window.console.info("(person.name:"+person.name);
5,在检测基本数据类型时,typeof操作符是非常得力的助手,但是在检测引用类型的值时,这个操作符的用处不大。通常,我们并不想知道某个值是对象,而是想知道它是什么类型的对性。为此,js提供了instanceof操作符,使用方法如下:
window.console.log(person instanceof Object);
本节源码下载地址:JavaScript学习笔记(5):基本类型和引用类型