今天来给大家介绍一下数据类型的另一种解读,值类型和引用类型(及简单类型和复合类型)
一、基本概念
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的关键字和保留字作为属性,点表示法不能
此处我就不向大家要一一举例啦,这里还是很好理解的,总之就是方括号表示法的功能强于点表示法,但是一般我们用点表示法注意下特殊的就好了。