zoukankan      html  css  js  c++  java
  • JavaScript基本类型与引用类型

    前面已经说过,JavaScript变量是松散类型,它可以保存任何类型的值。变量的值以及数据类型可以在脚本的生命周期内发生改变。变量包含两种不同类型的值:基本类型和引用类型。基本类型值的是简单的数据段,而引用类型指的是可能由多个值构成的对象。

    基本类型包括:undefined,null,boolean,number,string。这5中类型是按值访问的,可以操作保存在变量中的实际值。引用类型的值是保存在内存中的对象。JavaScript不允许直接访问内存中的对象,不能直接操作对象的内存空间。在操作对象时,实际操作的是对象的引用,而不是实际的对象。引用类型的值是按引用访问的。

    对于引用类型,定义引用类型后,可以为引用类型的变量添加属性和方法,也可以删除属性和方法。

    var obj = new Object();
    obj.name="druant";
    obj.sex="man";
    obj.getName=function(){
    return this.name;
    }
    console.log(obj.name);//druant
    obj.name="jordan";
    console.log(obj.getName());//jordan
    delete obj.name;
    console.log(obj.name);//undefined

    上面的代码中,首先定义了一个对象obj,为obj添加了属性name,sex并赋值。添加了方法getName,可以获取到对象的name。第一个console输出druant,obj.name="jordan",改变了obj属性name的值,第二个console输出 jordan。delete 用于删除对象的属性,所以第三个console输出undefined。

    从一个变量复制一个值给另一个变量时候,基本类型与引用类型是完全不同的。

    var num=5;
    var num1=num;

    上面的代码定义了变量num,并初始化值为5.第二句话将num的值赋给了num1,这样num1的值也为5,但是num1其实是创建了一个新的值,与num完全没有关系。当num的值发生改变的时候,num1不会发生改变。

    复制前

    Num

    5

    复制后

    Num1

    5

    Num

    5

    同样,引用类型的值也可以赋值给另一个对象。结束后,两个对象其实是指向了同一个堆中的对象。一个对象的改变会影响另一个对象的值。

    var obj = new  Object();
    var obj1 = obj;
    obj1.name="druant";
    console.log(obj.name);//输出name

    上面的代码定义了一个对象obj,并obj赋值给obj1,此时obj与obj1指向的是同一个引用,当为obj1添加属性的时候,obj同样拥有了相同的属性。

    对于函数的参数是按值传递的,但是基本类型的传参数和它的复制过程是一直的,同样引用类型的传值,同引用也是一致的。

    var num=10;
    function numTest(n){
        n+=n;
        return n;
    }
    var result=numTest(num);
    console.log(num);//输出10;
    function testObj(str){
    str.name="hello";
    }
    var obj = new Object();
    obj.name="world";
    testObj(obj);
    console.log(obj.name);//输出hello

    上述代码体现了基本类型和引用类型在函数参数使用过程中的不同。numTest内部的方法并没有改变num的值,而objTest确改变了外部obj的属性。

     检测一个数据是否是基本类型用typeof来检测,检测数据的引用类型用instanceof来检测。

    var person={};
    var colors=["red","blue"];
    console.log(typeof null);//object
    console.log(typeof undefined);//undefined
    console.log(typeof 23);//number
    console.log(typeof true);//boolean
    console.log(typeof "123");//string
    console.log(person instanceof Object);//true
    console.log(colors instanceof Array);//true
  • 相关阅读:
    关于LoginFilter的问题
    MyEclipse:各种提示图标的含义
    Js获取当前日期时间及其它操作
    微信jsApI及微信分享对应在手机浏览器的调用总结。
    js 刷新页面window.location.reload();
    applicationContext.xml
    网页打开微信的链接
    myeclipse竖行删除
    实现算法2.15、2.16的程序(一个数组只生成一个静态链表)
    循环链表
  • 原文地址:https://www.cnblogs.com/ggz19/p/8136562.html
Copyright © 2011-2022 走看看