JavaScript-数据类型及常见的检测方法

ECMAScript中定义了五种基本类型和引用类型.基本类型包括:String,Number,Boolean,Underfined,Null.
引用类型分别有Object类型,Array类型,Function类型等.

基本类型

基本类型存放在栈中,在进行比较时一般使用==来进行值比较,===会在值比较的基础上对数据类型进行比较.在进行值比较的时候,会进行隐式转化为相同数据类型进行比较.
基本类型的值不允许被改变.
var a=123;a.toUpperCase();console.log(a);//abcde

引用类型

引用类型的值保存在堆中的对象,实际为栈中保存了标量的标识符和指向堆内存中改对象的指针(地址信息),堆内存中保存了该对象的内容.它的值是按引用方式通过栈中的信息访问堆内存中的具体地址,引用类型的值可修改.import:Javascript无法直接操作对象的内存空间
由于每个对象的堆地址不痛,所以在进行比较的时候,两个对象的值是不一样的.
var a = {}; // 新建一个空对象a
var b= {}; // 新建一个空对象b
console.log(a == b); // false
console.log(a === b); // false

检测变量的数据类型方法

1.typeof:通常用与检测变量是不是基本的数据类型,这种方法不精确(array,object,null都识别为object类型)
var a;
a = null;
typeof a; // object
a = [];
typeof a; // object
a = {};
typeof a; // object

2.instanceof/constructor,判断一个实例是否属于这个类(可用于判断是否为继承关系),但是对于基本类型无法进行判断
console.log([] instanceof Array)/true
console.log({} instanceof Object)//true
console.log(1 instanceof Number)// false
null和instanceof的关系:
null表示为空的引用;instanceof 表示某个变量是否是某个对象的实例 ;object是所有数据的最根本类型.
null instanceof Object时,返回值为false,根据相关书籍表明:null的类型是object,但是null又不具有任何对象的特性.是一个比较特殊的对象.截至到目前也没有定论null 的类型在 MDN 文档中也有简单的描述:typeof - javascript | MDN.

3.constructor,根据返回创建此对象的数组函数的引用来判断改对象是哪种类型,但是contructor的属性可以被改写,判断有误差;
var a=123;console.log(a.constructor)//ƒ Number()
a=false;console.log(a.constructor)//ƒ Boolean()
a=function(){};console.log(a.constructor)//ƒ Function() { [native code] }

4.Object.prototype.toString.call(),使用 call 来调用该方法会返回调用者的类型字符串,返回为调用者的数据类型,包括:String、Number、Boolean、Undefined、Null、Function、Date、Array、RegExp、Error、HTMLDocument 等, 基本上,所有的数据类型都可以通过这个方法获取到。
Object.prototype.toString.call(’’) ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(null) ; // [object Null]
importance:必须通过 call 或 apply 来调用,所有对象的原型链都会指向object,如果不用call或者apply来改变原型链指向是无意义的.

猜你喜欢

转载自blog.csdn.net/qq_36082247/article/details/89084902