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方法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值