验证数据类型的四种方法

news/2024/11/30 1:29:59/

/**
 * 基本数据类型: number string boolean null undefined symbol(es6) bigInt(es10)
 * 复杂数据类型: array object function
 * 
 * 验证方法: 
 *         1. typeof
 *         2. instanceof
 *         3. constructor
 *         4. Object.prototype.toString.call()
 */

// 1. typeof 测试
console.log(typeof(1)); // number
console.log(typeof('str')); // string
console.log(typeof(false)); // boolean
console.log(typeof(null)); // object
console.log(typeof([])); // object
console.log(typeof({})); // object
console.log(typeof(undefined)); // undefined
console.log(typeof(function(){})); // function


// 2. instanceof 测试
console.log('1' instanceof String); // false - instanceof 不支持 基本数据类型的校验
console.log(1 instanceof Number); // false - instanceof 不支持 基本数据类型的校验
console.log(false instanceof Boolean); // false - instanceof 不支持 基本数据类型的校验

console.log([] instanceof Array); // true
console.log({} instanceof Object); // true
console.log(function() {} instanceof Function); // true

console.log(null instanceof null); // 无法验证
console.log(undefined instanceof undefined); // 无法验证


// 3. constructor 测试
console.log((1).constructor === Number); // true
console.log(('1').constructor === String); // true
console.log((false).constructor === Boolean); // true
console.log(([]).constructor === Array); // true
console.log(({}).constructor === Object); // true

console.log((null).constructor === null); // constructor 不支持 null的校验
console.log((undefined).constructor === undefined); // constructor 不支持 undefined的校验


// 4. Object.prototype.toString.call() 测试 - 我称它为 大BOSS
console.log(Object.prototype.toString.call(1)); // [object Number]
console.log(Object.prototype.toString.call('str')); // [object String]
console.log(Object.prototype.toString.call(false)); // [object Boolean]
console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]
console.log(Object.prototype.toString.call([])); // [object Array]
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call(function(){})); // [object Function]

// 封装方法: 与上等同
const getType = (val) => Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase()
console.log(getType(1)); // number
console.log(getType('str')); // string
console.log(getType(false)); // boolean
console.log(getType(null)); // null
console.log(getType(undefined)); // undefined
console.log(getType([])); // array
console.log(getType({})); // object
console.log(getType(function(){})); // function


http://www.ppmy.cn/news/696288.html

相关文章

剖析人生赚钱五大境界颠覆你的认知

这个世界,赚钱的方法数不数胜数。 360行,无论哪个行业都有赚大钱的,都有赚不到钱的。 那今天这篇文章你如果真的看懂了看进去了,对你的将来一定会有巨大的提升,无论是从认知方面,从思维角度、格局树立都会…

微软发布新品被指剽窃!交涉无果,两年开源项目被迫终结

作者 | Tina “我的开源项目被市值高达 1.4 万亿美元的微软偷走了。” 一名开发者用两年的业余时间开发并维护了一个开源项目 AppGet,项目取得了比较大的成功,并引起了微软的注意。 不幸的是,微软在 Build 2020 大会上推出了同样的项目。最终…

openttd架设服务器_Linux游戏评论:OpenTTD

openttd架设服务器 几个月前,我的一个朋友向我介绍了OpenTTD ,这是一个开源(GPLv2)运输计划模拟器游戏。 适用于Android,我在手机上短暂打开了游戏,发现在5英寸的屏幕上使用该界面有些困难。 我的朋友建议在…

html语言中的表单元素,HTML5中的表单元素有哪些

摘要 腾兴网为您分享:HTML5中的表单元素有哪些,指南针,之了课堂,云端学习,易视云3等软件知识,以及挣钱花,猎豹浏览器本,移动彩铃,豆瓣音乐,mine,dnf雪人像素头…

JS笔记

js概念 什么是js js是一种基于对象和事件驱动的解释性脚本语言. 基于对象: js可以使用自己创建出来的对象 事件驱动: 由事件去触发的 解释性: 编译性来说, 不需要进行编译打包,浏览器可以直接识别 跨平台性: 只要有浏览器就可以识别执行 组成部分: ​ ECMAS…

个人目标——娱乐篇(持续更新)

罗素曾说:让自己拥有一种热情(Zest),这种热情可以是某种爱好,也可以是某种兴趣。一个人的兴趣越广泛,所拥有的快乐的机会就越多。即使失去了某一种兴趣,依然可以转向另一种。 兴趣与获取快乐的多…

vue PC端完成电子签名

最近接到一任务,有一个功能,重来没有遇到过。就是电子签名 看了原型其他基本都是对接口、写表单,难度不大,先把电子签名给攻克了起。 因为项目是vue 所有使用了 vue-esign 组件 1. 安装依赖 npm install vue-esign --save2.使用…

论文分享 --> 数据挖掘

本次要分享的论文是 cikm2014论文 Modeling Paying Behavior in Game Social Networks,本论文由 腾讯公司和 清华大学联合出品,深入探讨了 如何挖掘 游戏数据中的 高潜付费玩家,详细分析了 免费玩家 向 付费玩家转化规律。虽然本论文所提模型…