前言
类型判断是我们在日常工作中经常会遇到的一个功能,本文将给大家详细介绍关于javascript类型判断的相关内容,下面话不多说了,来一起看看详细的介绍吧
Javascript中数据类型分为两种:
- 简单数据类型:Undefined, NULL, Boolean, Number, String
- 复杂数据类型:Object
接下来我们就来看看怎么做数据类型判别吧?
首先来看看 typeof
Type
Result
Undefined
"undefined"
Null
"object" (see below)
Boolean
"boolean"
Number
"number"
String
"string"
Symbol (new in ECMAScript 2015)
"symbol"
Host object (provided by the JS environment)
Implementation-dependent
Function object (implements [[Call]] in ECMA-262 terms)
"function"
Any other object
"object"
来点code demo吧
let a = undefined; typeof a "undefined" let b = false; typeof b "boolean" let c = 12; typeof c "number" let d = '12'; typeof d "string" let f = function () {}; typeof f "function"
接下来我们就来看看那些奇怪的现象吧
let str = new String('abc'); typeof str "object" let num = new Number(12); typeof num "object" var func = new Function(); typeof func; "function" typeof null "object"
使用构造函数创建的变量,使用typeof判断会返回“object”结果,但是Function函数例外,由它创建的变量typeof返回的是“function”
接着就来说说typeof null == "object"。这个相信前端开发的小伙伴都知道是这个结果了,But why"external nofollow" target="_blank" href="http://2ality.com/2013/10/typeof-null.html">The history of typeof null
关于如何判断数组
let arr = [1, 2, 3]; typeof arr "object"
上面这个结果大家应该不陌生,那该如何正确判断数组类型呢
1、instanceof
arr instanceof Array //true
2、isArray
Array.isArray(arr) // true
3、constructor.name
arr.constructor.name // "Array"
第三种用法用的人应该比较少,不少前端的的小伙伴都没用过。对于复杂类型Object,它的每个实例都有constructor属性。
instanceof vs isArray
当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes.
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray(1,2,3); // [1,2,3] // Correctly checking for Array Array.isArray(arr); // true // Considered harmful, because doesn't work though iframes arr instanceof Array; // false
这段代码是从MDN copy的。补充以下结果,发现第三种方法constructor.name也能正确判断出。
arr.constructor.name //"Array"
关于NaN
使用isNaN判断NaN。
isNaN(1/'a') // true
我们知道NaN == NaN结果是false,那如何判断两个NaN变量呢?
比较两个NaN变量,使用es6的Object.is()即可。
let nan1 = NaN let nan2 = NaN Object.is(nan1, nan2) true
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]