前言
类型判断是我们在日常工作中经常会遇到的一个功能,本文将给大家详细介绍关于javascript类型判断的相关内容,下面话不多说了,来一起看看详细的介绍吧
Javascript中数据类型分为两种:
接下来我们就来看看怎么做数据类型判别吧?
首先来看看 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? 这其实是javascript第一个版本就存在的一个bug,历史原因可以看看这篇文章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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
options 怎么会是这个类型?应当是{ [key: string | number]: any }[] 才对啊。 是哪里出了问题?如何解决呢? "vue-tsc": "^1.8.27"
本文向大家介绍关于JavaScript和jQuery的类型判断详解,包括了关于JavaScript和jQuery的类型判断详解的使用技巧和注意事项,需要的朋友参考一下 对于类型的判断,JavaScript用typeof来进行。 栗子: 可以看到,typeof并不能够准确的判断出每一种数据类型,比如null和数组等都是object类型。因此,JavaScript判断数据类型不推荐使用typeof。
1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把? 2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把? 3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报
本文向大家介绍JavaScript中如何判断一个值的类型,包括了JavaScript中如何判断一个值的类型的使用技巧和注意事项,需要的朋友参考一下 我们知道在js中有一个运算符可以帮助我们判断一个值的类型,它就是typeof运算符。 我们从以上结果可以看出typeof的不足之处,它对于数值、字符串、布尔值分别返回number、string、boolean,函数返回function,undefine
young gc是不是针对所有的新生代region进行回收?我的理解是young gc会回收全部的新生代Region,并调整Eden区数量来满足软实时性要求; Oracle文档中指出在并发标记期间还可能进行额外的young gc,这不会破坏并发标记期间的内存布局么?比如现在正在进行并发标记,对于某个Eden Region A, 还未完成标记,此时若是发生young gc,A会被如何处理? 以及这位
结果: 问题: 1.lis,ele=>ele.textContent中我把ele.textContent换成了lis.textContent结果出来的是一个undefine的集合,是为什么? 2.lis,ele=>ele.textContent我是否可以理解为Array.from(arr,function),然后返回元素的文本内容? 3.该怎么理解lis和ele之间的关系呢?(因为看到很多案例都是