zoukankan      html  css  js  c++  java
  • js 值类型和引用类型

    今天来给大家介绍一下数据类型的另一种解读,值类型和引用类型(及简单类型和复合类型)

    一、基本概念

      ECMAscript变量包括两种不同的数据类型的值,一种叫做简单类型(值类型),指的是简单的数据段,另一种叫做复合数据类型(引用类型),是由多个值构成的对象。

      在js的数据类型中,number,boolean,string,null和undefined都属于值类型,而函数和对象属于引用类型。

    二、数据类型判断

      基本类型:typeof

      引用类型:instanceof

    var a=10;
    console.log(typeof a);
    //number
    
    var b=true;
    console.log(typeof b);
    //boolean
    
    var arr=[];
    console.log(arr instanceof Array);
    //true
    
    var obj={};
    console.log(obj instanceof Object);
    //true;
    
    var fun=function(){
      var i=0;
      console.log(i);            
    }
    console.log(fun instanceof Function)
    //true

    三、存储机制

      基本数据类型:是存放于栈内存中,包括变量标识符和变量的值,基本数据类型复制后开辟的是新的内存,两个变量互不影响。

      引用类型:保存在堆内存中,是对地址的引用(及指针),所以变量复制后的两个变量指向的还是同一个对象,因此对其中一个进行操作,另一个结果也会受到影响。

      先给大家举点例子吧

    var num1=10;
    var num2=num1;
    num2-=2;
    console.log(num1,num2);
    //10,8
    
    var arr1=[1,2,3];
    var arr2=arr1;
    arr2.push(4);
    console.log(arr1,arr2);
    //[1,2,3,4],[1,2,3,4]
    
    var person1={
    name:'zhangsan',
    age:20
    }
    var person2=person1;
    person2.name='lisi';
    console.log(arr1,arr2);
    //{name:'lisi',age:20},{name:'lisi',age:20}

    四、创建对象实例的方法

      1,使用new操作符后跟Object构造函数

      2,字面量

      

    var obj=new Object();//
    var obj2={};
    console.log(obj,obj2);
    //{},{}     console.log(obj==obj2)  false  堆内存,不同地址
    /获取
    //以及点表示法和方括号表示法
    var person1={
    name:'zhangsan',
    age:20
    }
    console.log(person1.name)//zhangsan
    console.log(person1['name'])//zhangsan

      ps:点表示法和方括号表示法的区别

      1,能用点表示法标识的一定可以用方括号表示,但能用方括号表示的,不一定能用点表示

      2,方括号表示法可以用变量名做属性名,点表示法不能

      3,方括号可以用纯数字表示属性,点表示法不能

      4,方括号表示法可以用js的关键字和保留字作为属性,点表示法不能

      此处我就不向大家要一一举例啦,这里还是很好理解的,总之就是方括号表示法的功能强于点表示法,但是一般我们用点表示法注意下特殊的就好了。

    作者:epines
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Seam jBPM integration
    NetBeans 时事通讯(刊号 # 34 Nov 11, 2008)
    Seam jBPM integration
    小学生新闻联播看多了,写的作文
    位运算中的异或运算 .
    按位与、或、异或等运算方法
    C++中L和_T()之区别
    ExtJS入门之一 类与继承
    结构体初始化
    Ext.chart 包的类图
  • 原文地址:https://www.cnblogs.com/epines/p/9131305.html
Copyright © 2011-2022 走看看