JS数据类型及判断方法总结
数据类型分类
JS数据类型共有6种:5种基本数据类型+引用数据类型;
5种基本数据类型:undefined,string,boolean,null,number(便于记忆缩写为USB+2N);
引用数据类型object:Function,Array,Date,RegExp…
基本数据类型 | 引用数据类型 |
---|---|
值不可变 | 值可变 |
比较的是值的比较 | 比较的是引用的比较 |
变量存储在栈中 | 同时保存在栈内存和堆内存中的对象 |
简单赋值 互不影响 | 对象引用 相互影响 |
typeOf判断法
typeof返回值是一个表示数据类型的字符串,它可以用来判断基本数据类型,不能判断引用数据类型
- null,object,Array 返回值为object
- Function返回值为function
- String返回值为string
- number返回值为number
- boolean返回值为boolean
- undefined返回值为undefined
instanceOf判断法
instanceOf返回值是true/false。它检测的是原型,主要作用是判断一个实例是否属于某种类型。一般可以检测引用数据类型(不可以判断null和undefiend);
例如
A instanceOf B
Array instanceOf Array //返回值为true;
instanceOf原理
主要实现原理:右边变量的prototype在左边变量的原型链上即可;因此instanceOf在查找的过程中会便历左边变量的原型链,直到找到右边变量的prototype,如果查找失败则返回false
function instanceOf(leftValue,rightValue){
//prototype是构造函数特有的属性
let rigthProto = rightValue.prototype;
//JS中的对象都有一个_proto_属性,这个是对象的隐式原型,指向该对象的父对象的原型prototype
leftValue = leftValue._proto_;
while(true){
if(leftValue === null){
return false;
}
if(leftValue ==== rigthProto){
return true;
}
leftValue = leftValue._proto_;
}
}
判断是否为null
//全等号判断法
var variable = null;
if(variable === null){
//为null
}
//排除判断法
if(!variable && typeOf variable != "undefiend" && variable != 0 ){
//为null
}
object.prototype.toString判断法
object.prototype.toString返回值是其调用者的具体类型,
例如
console.log(Object.prototype.toString.call(“jerry”));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: “jerry”}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
注:用call来强制执行Object的toString方法