zoukankan      html  css  js  c++  java
  • javascript 基本类型和引用类型的区别

    基本类型

    基本类型为:可以用typeof检测为什么类型

    • undefined   变量未赋值时为undefined   var some; typeof some //undefined
    • number  typeof 12   //number
    • null      var call=null  typeof car //object

      从逻辑上讲,表示一个空对象指针,这也是typeof null为object的原因,如果定义的变量将来用于保存对象,建议初始化的时候为var obj=null,这样一来,直接检查null的值就可以知道相应的变量是否已经保存一个对象的引用

    • boolean typeof true   //boolean
    • string typeof "hello"  //string
    • object   var obj={},  typeof obj //object
    引用类型
    • object  object有两种创建方式
      var person=new Person();
      person.name="Lily";
      person.age=22
      var person={
                   name:“Lily”,
                   age:22
    • Array
    • Date
    • RegExp
    • Function
    两者的区别

    1.动态的属性

    var person=new Object();
    person.name="Lily";
    alert(person.name)   //"Lily"
    var person="Lily";
    person.name="Lucy";
    alert(person.name)  //undefined

    可以看到我们可以给基本类型添加属性,但在下次访问的时候,这个属性就不见了,可以看出只能给引用类型添加属性

    2.复制变量值

    var num1=5;
    num2=num1;
    num1=7;
    alert(num2) //5
    var obj1={name:"Lily",age=22};
    obj2=obj1;
    obj.addr="shenzhen"
    alert(obj2.addr)   //shenzhen

    obj1和obj2都指向同一个对象,当obj1增加了addr属性后 ,可以通过obj2访问这个属性,因为这两个变量引用的都是同一个对象

    3.传递参数

    ECMAScript都是按值传递的

    function add(num){
      num+=10;
      return num; 
    }
    var count=20;
    var result=add(count);
    alert(count) //20
    alert(result) //30
    function add(obj){
     obj.name="Lily";
    }
    var person=new Object();
    person.name="Lucy";
    add(person);
    alert(person.name)  //Lily

    person和obj引用的是同一个对象,即使这个对象是按值传递的,obj也会按引用来访问同一个对象,于是obj修改了属性name的值,person也会有反应

    function add(obj){
     obj.name="Lily";
    obj=new Object();
    obj.name="Jack"; }
    var person=new Object(); person.name="Lucy"; add(obj); alert(person.name) //Lily

    这个例子就很好的证明了参数是按值传递的,如果是按引用类型,弹出的应该为Jack

    4.检测类型

    基本类型用typeof,引用类型用instanceof

  • 相关阅读:
    mysql的增量备份与全备的脚本
    mysql5.7的密码
    mysql 修改root密码
    centos7上面安装MySQL
    centos7上开启路由转发
    python基础之3
    python基础之2
    深入浅出FPGA-2-让source insight 支持verilog HDL
    Verilog 1995 VS Verilog 2001
    环境搭建基础知识2(sublime text3中配置verilog语法高亮)
  • 原文地址:https://www.cnblogs.com/zengm/p/3678981.html
Copyright © 2011-2022 走看看