博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript数据类型检测的几种方式
阅读量:7071 次
发布时间:2019-06-28

本文共 2154 字,大约阅读时间需要 7 分钟。

类型检测的方法

  1. typeof

  2. instanceof

  3. Object.protype.toString

  4. constructor

  5. duck type:鸭子类型

clipboard.png

typeof

返回一个字符串,适合函数对象和基本类型的判断

var a = 123;var b = '123';var c = false;var d = null;var e = undefined;var f = {};var g = function(){};var h = [];var i = NaN;console.log(typeof a);console.log(typeof b);console.log(typeof c);console.log(typeof d);console.log(typeof e);console.log(typeof f);console.log(typeof g);console.log(typeof h);console.log(typeof i);

clipboard.png

instanceof

返回一个布尔值,判断对象类型(基于原型链的方式)

原理:

左边对象的原型链(_proto_原型)上是否有右边构造函数的prototype对象属性

clipboard.png

var a = 123;    var b = '123';    var c = false;    var d = null;    var e = undefined;    var f = {};    var g = function(){};    var h = [];    var i = NaN;    console.log(a instanceof Number);    console.log(b instanceof String);    console.log(c instanceof Boolean);    console.log(d instanceof Object);    console.log(e instanceof Object);    console.log(f instanceof Object);    console.log(g instanceof Function);    console.log(h instanceof Array);    console.log(i instanceof Number);//NaN是基本类型

这么多false就说明instanceof不适合用于基本数据类型!!

clipboard.png

Object.prototype.toString

var oP = Object.prototype,toString = oP.toString;console.log(toString.call(123));//[object Number]console.log(toString.call('123'));//[object String]console.log(toString.call(false));//[object Boolean]console.log(toString.call(undefined));//[object Undefined]console.log(toString.call(null));//[object Null]console.log(toString.call({a: '123'}));//[object Object]console.log(toString.call(/123/));//[object RegExp]console.log(toString.call([123]));//[object Array]console.log(toString,call(Date));//[object Function]

注意:IE6/7/8 Object.prototype.toString.call(null/undefined)返回的是[object Object]

constructor

var a = 123;var b = '123';var c = false;var d = null;var e = undefined;var f = {};var g = function(){};var h = [];var i = NaN;console.log(a.constructor == Number);console.log(b.constructor == String);console.log(c.constructor == Boolean);// console.log(d.constructor == Object);// console.log(e.constructor == Object);console.log(f.constructor == Object);console.log(g.constructor == Function);console.log(h.constructor == Array);console.log(i.constructor == Number);

clipboard.png

转载地址:http://nekml.baihongyu.com/

你可能感兴趣的文章
敏捷并不是一件好的事情
查看>>
js获取客户端本地ip
查看>>
JQuery事件之取消默认行为
查看>>
redis 学习笔记(未完)
查看>>
线程组
查看>>
dell c6220安装系统--166
查看>>
python 字典多种方法删除 keys
查看>>
VIM使用系列:位置跳转和块模式
查看>>
数组资源
查看>>
【乡巴佬】在Word中合理排列文本框与文本
查看>>
maven 子项目 deploy 到私服
查看>>
等待实习的offer中的想法
查看>>
在Apache配置https方式访问网站
查看>>
线程开发之多线程之间的通讯实现
查看>>
全面分析 Spring 的编程式事务管理及声明式事务管理
查看>>
Leetcode——最长不重复子串
查看>>
myEclipse 中看jar源代码
查看>>
Linux awk 命令 说明
查看>>
shell之变量和引用
查看>>
两个基本概念 标称型数据和数值型数据
查看>>