今天来给大家介绍一下数据类型的另一种解读,值类型和引用类型(及简单类型和复合类型)
一、基本概念
ECMAscript变量包括两种不同的数据类型的值,一种叫做简单类型(值类型),指的是简单的数据段,另一种叫做复合数据类型(引用类型),是由多个值构成的对象。
在js的数据类型中,number,boolean,string,null和undefined都属于值类型,而函数和对象属于引用类型。
二、数据类型判断
基本类型:typeof
引用类型:instanceof
var a=10;console.log(typeof a);//numbervar b=true;console.log(typeof b);//booleanvar arr=[];console.log(arr instanceof Array);//truevar 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,8var 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)//zhangsanconsole.log(person1['name'])//zhangsan
ps:点表示法和方括号表示法的区别
1,能用点表示法标识的一定可以用方括号表示,但能用方括号表示的,不一定能用点表示
2,方括号表示法可以用变量名做属性名,点表示法不能
3,方括号可以用纯数字表示属性,点表示法不能
4,方括号表示法可以用js的关键字和保留字作为属性,点表示法不能
此处我就不向大家要一一举例啦,这里还是很好理解的,总之就是方括号表示法的功能强于点表示法,但是一般我们用点表示法注意下特殊的就好了。