JS之数据类型判断

基本数据类型

typeof
  • 返回结果有"string"、“number”、“boolean”、“undefined”、“object”、“function”
  • number,string,boolean,undefined基本数据类型可正确判断,null与NaN例外。
        console.log(typeof 1);//number
        console.log(typeof '1');//string
        console.log(typeof true);//boolean
        console.log(typeof undefined);//undefined
        console.log(typeof NaN);//number
  • Symbol、function返回function,不分明
        console.log(typeof Symbol);//function
        function fn() { };
        console.log(typeof fn);//function
  • null 数组 日期 正则返回object,不分明
        console.log(typeof null);//object,指空对象索引
        console.log(typeof []);//object
        console.log(typeof new Date());//object
        console.log(typeof new RegExp());//object

引用数据类型

instanceof

判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 (是否出现在对象的原型链中的任何位置)或 对象A是不是在B的prototype上。
基本数据类型不能判断。只有函数才有原型链。

  • 数组
console.log([] instanceof Array); //true

思路是这样的
在这里插入图片描述
console.log([] instanceof Object);//ture也是成立

  • 对象
 var o = {};
 console.log(o instanceof Object); // true码片
  • 日期 正则
console.log(new Date() instanceof Date); // true
console.log(new RegExp() instanceof RegExp) ; // true
  • 函数
function fn() { };
 console.log(fn instanceof Function);//true

所有类型,但不稳定

constructor

对象A的constructor ===创建对象A的函数,查看对象对应的构造函数

  • 基本类型
    字符,数字,布尔 判断正确
console.log('A'.constructor==String);//true
var num=2;
console.log(num.constructor==Number);//true
console.log(true.constructor==Boolean);//true

undefined 与 null 判断错误 。 因为他们指的是无效对象

        console.log(undefined.constructor==undefined);// undefined has no properties
        console.log(undefined.constructor==Object);// undefined has no properties
        console.log(null.constructor==Object);//TypeError: null has no properties
  • 引用类型
    时间,正则,函数,(对象)成功
        console.log(new Date().constructor==Date);//true
        console.log(new RegExp().constructor== RegExp);//true
        function fn() { };
        console.log(fn.constructor== Function);//true
        var o = {};
        console.log(o.constructor== Object); // true

但不建议,因为能重写,如下

function A(){};
Aaa.prototype.constructor = A;//程序可以自动添加,当我们写个构造函数的时候,程序会自动添加这句代码
function B(){};
Aaa.prototype.constructor = B;//此时我们就修改了Aaa构造函数的指向问题
alert(Aaa.construtor==A);//false

终极方法 全类型

Object.prototype.toString.call()

返回一个表示当前函数源代码的字符串
基本类型

        var str = 'A';
        console.log(Object.prototype.toString.call(str));//[object String]
        var bool = true;
        console.log(Object.prototype.toString.call(bool))//[object Boolean]
        var num = 123;
        console.log(Object.prototype.toString.call(num));//[object Number]
        var nul = null;
        console.log(Object.prototype.toString.call(nul));//[object Null]
        var und = undefined;
        console.log(Object.prototype.toString.call(und));//[object Undefined]

引用类型 函数 对象

        var date = new Date();
        console.log(Object.prototype.toString.call(date));//[object Date]
        var json = {};
        console.log(Object.prototype.toString.call(json));//[object Object]
        var arr = [];
        console.log(Object.prototype.toString.call(arr));//[object Array]
        var reg = /a/;
        console.log(Object.prototype.toString.call(reg));//[object RegExp]
        var fn = function(){};
        console.log(Object.prototype.toString.call(fn));//[object Function]
        var error = new Error();
        console.log(Object.prototype.toString.call(error));//[object Error

最后 偷一张图,忘记在哪里看的了 感觉不错贴一下
在这里插入图片描述
最后的最后,加一个小东西

  • 判断null与undefined的函数
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值