Javascript变量值的类型

Javascript中的变量的值有两种不同类型的值,基本类型值和引用类型值。

基本类型包括了 Number, String, Boolean, Undefine 和 Null 五类。基本类型值允许直接操作保存在变量中实际的值。可以理解基本类型值独占了某个值。例如 var num = 1 ,那么 num 就独占了 1

引用类型的值是保存在内存中的对象,可以将引用类型的值理解为对内存中某个对象的一个引用。那么对某个引用类型值得操作就是对内存中对象的操作。内存中的某个对象可能被多个引用类型值引用,所以相对基本类型值,引用类型值并不能独占某个对象。


1,引用类型值的动态属性。

引用类型值可以动态的添加属性,基本类型值则不可以。

var person = new Object();
person.name = 'hu';
alert(person.name);         //'hu'

如果person是基本类型值,alert 出来的值就会是 undefine


2,复制变量。

从一个变量向另一个变量复制基本类型值时,会在新变量上创建新的值。

var num1 = 5;
var num2 = num1;

之后无论对num2 做什么操作,num1 的值不会改变。

当从一个变量向另一个变量复制引用类型值时,也会将原变量的值复制一份放在新变量中,但是这个值是一个指向内存中对象的指针。所以两个变量就会引用内存中相同的对象。之后对其中一个变量的操作也会体现在另一个变量之上。

var obj1 = new Object();
var obj2 = obj1;
obj2.name = 'hu';
alert(obj1.name);         // 'hu'

3,参数传递。

Javascript中函数的参数传递都是按值传递的。也就是把函数外部的值复制给函数内部的参数。原理和把值从一个变量复制到另一个变量一样。

对于传基本类型值的参数,按值传递比较好理解。看一下下面的代码:

function add(num) {
    num++;
    return num;
}

var count = 0;
var result = add(count);
alert(count);       //0
alert(result);      //1

可见,传进参数是 count 的值而不是 count 变量本身。

对于传引用类型值得参数,虽然也是按值传参,但由于引用值是对象的引用,所以引用值变量作为参数传递之后,变量的值对应的对象可能会有变化。看一下一下的代码:

function setName(obj) {
    obj.name = 'hu';
}

var person = new Object();
setName(person);
alert(person.name);       //'hu'

其实,传进函数的也是变量的值而不是变量的本身。但由于引用值是内存中对象的指针。所以对指针所指对象的修改在函数之外也会反映出来。

猜你喜欢

转载自blog.csdn.net/huinsysu/article/details/51985155
今日推荐