版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihuijuan_1/article/details/86586175
一,数据类型
- 1)基本数据类型(5):number,boolean,string,undefind,null
- 2)引用数据类型:function ,array,date
- 3) 复杂数据类型(1):object
二,基本数据类型和引用数据类型的区别
- 1)基本数据类型☞简单的数据段,按值访问,直接操作实际值
引用数据类型☞ 由多个值组成的对象
将一个变量赋值给另一个对象的时候,解析器首先判断的是这个对象的数据类型 - 2)基本数据类型 栈内存
var a=10;
var b=a;
b=20;
console.log(a) //10
引用数据类型
var obj1=new Object()
var obj2=obj1;
obj2.name="li"
console.log(obj1.name) //li
两个数据类型指向了同一个堆内存对象,obj1赋值给obj2,实际上是将地址给了obj1
- 2声明变量时不同的内存分配
原始值是指存储在栈内存中的简单数据段,也就是访问变量的直接位置,因为大小固定,所以占用的空间较小。
引用值是指存储在堆内存中的对象,变量的值就相当于指向对象地址的指针,- 3不同的内存分配机制带来了不同的访问机制
原始值可以直接访问得到
因为不能直接访问堆内存中的对象,所以会先根据值知道对象的地址,再访问对象的值,即引用访问。
- 3不同的内存分配机制带来了不同的访问机制
类型的判断方式
- 1)typeof,不能判断array,null,function,都为Object,只能返回 string,boolean,number,undefined,object,function,symbol
typeof 123 //Number
typeof null //Object(null类型被当成一个空对象引用)
typeof(obj)==“string” ?true :false判断一个变量是否存在 if(typeof a!=undefined){console.log("yes")} if(a){} //如果a未声明则报错
- 2)instanceof 判断某个变量是否是某个对象的实例
a instanceof Array 返回boolean值,trueif(window instanceof object){console.log("false")} 这里的object是js语法中的object,不是dom对象
- 3)constructor
obj.constructor===String?true:false - 4)prototype
Object.prototype.toString.call(obj)==="[object String]" ?true:false - 5)isNaN(不是数字为true)
isNaN(123) //false isNaN(“123”) //true
三大引用类型
- 1)object,创建object实例有2中方法
- a new操作符
var obj=new Object();
obj.name=“li”
-b 字面量
var obj={name:“li”,age:10} - 2)array,每一项都可以保存任意类型的数据
-a Array构造函数
var arr=new Array(“12”,“resds”);
-b数组字面量
var arr=[“red”,“green”] - 3)Function
-a function fn1(){}
-b var fn2=function(){}三,null和undefined的区别
- 1)undefined:(1),var声明了但是没赋值,有这个对象
(2)null表示没有对象,原型链的终点
if(null) //false if(undefined) //false if(null==undefined) //true if(null===undefined) //false
- 1)undefined:(1),var声明了但是没赋值,有这个对象