二、概念
ECMAscript变量可能包括两种不同数据类型的值,一种叫简单类型或者说是值类型,指的是简单的数据段,另一种叫复合类型或者说是引用类型,是由多个值构成的对象。
在js的数据类型中,number,boolean,string,null和undefined都属于值类型,而函数和对象属于引用类型。
三、判断
判断数据类型的方法
检测基本值类型的方法:typeof
(ps:由于判断引用类型返回的值是Object,所以需要了解具体的类型,所以就要依赖instanceof操作符)
判断引用类型的方法:instanceof (返回true和false)
obj instanceof Array
obj instanceof Function
obj instanceof Object
四、存储机制
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}
基本数据类型:是存放于栈内存中,包括变量标识符和变量的值,基本类型复制后开辟新的内存空间,两个变量互不影响。
引用类型:保存在堆内存中,是对地址的引用(及指针),所以两个变量指向的还是同一个对象,对任何一个进行操作,其结果都会受到影响。
五、创建对象实例的方式
创建Object实例的方式,1,使用new操作符后跟Object构造函数
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
点和方括号表示法的区别
1,能用点表示的一定可以用方括号表示,但是能用方括号表示的,不一定能用点表示
2,方括号表示法可以用变量名做属性名,点表示法不能
3,方括号表示发可以用纯数字为属性,点表示法不能
4,方括号表示法可以用js的关键字和保留字作为属性,点不能
六、基本包装类型
ECMAscript提供了三个特殊的引用类型:Number,Boolean,String
var num=new Number();
var newNum=num.toString();
//此处toString()和基本类型的toString()方法不一样,此处是Number这个构造函数内部的一个方法(toString())
var a='10';
var b=new Number(a);//包装类型
var c=Number(a);//类型转换
console.log(typeof b,typeof c);
//object,number