今天分享3种javascript类型判断的方法:typeof、instanceof、constructor。
首先先看下所有的数据类型:
空值(null)未定义(undefined)布尔值(boolean)数字(number)字符串(string)对象 (object)符号(symbol, es6中新增)大整数(bigint, es2020 引入)除去object,其他的我们统称基本类型,最后两个类型为新引入的前端数据类型。
symbol: 是es6中引入的一种原始数据类型,表示独一无二的值。
bigint:是 es2020 引入的一种新的数据类型,用来解决 javascript中数字只能到 53 个二进制位(javascript 所有数字都保存成 64 位浮点数,大于这个范围的整数,无法精确表示的问题。具体可查看:新数据类型 — bigint
example:
console.log(typeof ""); // stringconsole.log(typeof 1 ); //知足常乐什么意思 numberconsole.log(typeof nan ); // numberconsole.log(typeof true); // booleanconsole.log(typeof undefined); // undefinedcons抗美援朝的历史意义ole.log(typeof function(){}); // functionconsole.log(typeof isnan); // functionconsole.log(typeof symbol()); // symbolconsole.log(typeof 123n); // bigintconsole.log(typeof []); // objectconsole.log(typeof {}); // objectconsole.log(typeof null); // objectconsole.log(typeof new date()); // objectconsole.log(typeof new regexp()); // object
对于数组,对象,nul在树上l以及时间等数据,typeof只能返回object,而不能直接返回对应的类型,还需要通过其他法判断。
example:
console.log(12 instanceof number); // falconsole.log('22' instanceof string); // falconsole.log(true instanceof boolean); // falconsole.log(null instanceof object); // falconsole.log(undefined instanceof object); // falconsole.log(function a() {} instanceof function); // trueconsole.log([] instanceof array); // trueconsole.log({a: 1} instanceof object); // trueconsole.log(new date() instanceof date); // true
简单来说就是,判断某个数据是否是由某个构造函数的实例,如果是,返回true,不是就返回fal。
深层次来讲就是,instanceof 右边的prototype是否能在instanceof左侧同源宾语的数据的_proto_原型链上找到,这是个遍历的过程。找到就是true。
example:
console.log('22'.constructor === string) // trueconsole.log(true.constructor === boolean) // trueconsole.log([].constructor === array) // trueconsole.log(document.constructor === htmldocument) // trueconsole.log(window.constructor === window) // trueconsole.log(new number(22).constructor === number) // trueconsole.log(new function().constructor === function) // trueconsole.log(new date().constructor === date) // trueconsole.log(new regexp().constructor === regexp) // trueconsole.log(new error().constructor === error) // true
constructor是追溯对象的出生地,也就是说可以知道某个对象是由哪个构造函数产生的。
原理其实是当构造函数被创建时,会在它的prototype上创建constructor属性,而该属性又指向函数本身,当实例被创建时,它的constructor会被继承,嗯….构造函数就是实例的类型。
注意:null 和 undefined 是没有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。
结尾:其实还有一种方法:
object.圣诞节手抄报prototype.tostring.call(),感兴趣的自己去查文档研究研究。
本文发布于:2023-04-05 09:32:35,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/364ffd8eca2b39ab095a3cbdaa65f618.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:js类型判断的方法(JS的基本类型共有三种).doc
本文 PDF 下载地址:js类型判断的方法(JS的基本类型共有三种).pdf
留言与评论(共有 0 条评论) |