JavaScript基本类型和引用类型 

1.1 基本数据类型和引用数据类型

       ECMAScript可能包含两种不同的数据类型的值:基本数据类型和引用类型值。

            基本数据类型:简单的数据段(Number、String、Null、Undefined、Boolean),是它自身的实际值。

               eg:  var age = 12;

            引用数据类型:可能由多个值组成的对象(Array、Object),是一个指向该对象地址的一个指针。

                eg: var arr = [1,2,3,4];

  1.2 复制变量值

        复制基本变量值 ,复制之后的两个值互相独立,互不影响。  

            var num1 = 1;

                   num2 = num1;

JavaScript高级程序设计之基本类型和引用类型

        复制引用类型,也会将储存在变量中的值复制一份到为新变量分配的空间中(这个值是一个指针,指向储存在堆中的一个对象)。复制之后,两个值是指向同一个对象。

        var obj1 = new Object();

         var obj2 = obj1;

          obj1.name = 'Beaver';

JavaScript高级程序设计之基本类型和引用类型

   1.3 传递参数
        ESMAScript中所有的函数都是按值传递的。基本类型值的传递就像基本类型值的复制一样,而引用类型的传递,则像引用类型变量的复制。访问变量的方式有按值和按引用两种,而传参只能值传递。
    向参数传递基本类型时 eg:
   
function add(num) {
    num += 10;
    return num;
}
var count = 10;
var result = add(count);
console.log('count: '+count +", result: "+result); //count: 10, result: 20
向参数传递引用类型时 eg:

function setName(obj) {
    obj.name = "Beaver";
}
var person = new Object();
setName(person);
console.log(person.name); //Beaver
上述代码创建了一个对象person,将这个变量传递到setName()函数中被复制给obj.在这个函数内部,obj和
person引用的都是同一个对象。换句话说,即使这个值是按值传递的,obj也会按引用来访问同一个对象。
为了证明对象是按值传递的:
function setName(obj) {
    obj.name = "Beaver";
    obj = new Object();
    obj.name = "David";
}
var person = new Object();
setName(person);
console.log(person.name);//Beaver
在上述代码中,重新为obj定义了一个对象,给obj.name重新赋值,如果person是按照引用传递,那么person
就会被改为指向其name属性值为David的新对象。然而输出的依然是Beaver。这说明即使在函数内部修改了参数
的值,但原始的值仍然未改变。

1.3 检测类型

    typeof是确定一个字符串、数值、布尔值,还是undefined的最佳工具。

var item1 = 'Beaver';
var item2 = 25;
var item3 = true;
var item4;
var item5 = null;
var item6 = new Object();
console.log(typeof item1);//string
console.log(typeof item2);//number
console.log(typeof item3);//boolean
console.log(typeof item4);//undefined
console.log(typeof item5);//object
console.log(typeof item6);//object
  当我们想检测某个值是什么类型的对象时,我们用instanceof。
    语法:variable instanceof constructor  //返回true或者false
var person = new Object();
var arr = [];
console.log(person instanceof Object);//true
console.log(arr instanceof Array);//true
所有引用类型的值都是Object的实例。

相关文章: