javascript中关于类型判断的一些疑惑小结


Posted in Javascript onOctober 14, 2018

前言

类型判断是我们在日常工作中经常会遇到的一个功能,本文将给大家详细介绍关于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? 这其实是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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
找到一点可怜的关于dojo资料,谢谢作者!
Dec 06 Javascript
javascript Onunload与Onbeforeunload使用小结
Dec 31 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
Feb 19 Javascript
JavaScript 面向对象与原型
Apr 10 Javascript
JavaScript中DOM详解
Apr 13 Javascript
location.hash保存页面状态的技巧
Apr 28 Javascript
vue.js父组件使用外部对象的方法示例
Apr 25 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
微信小程序mpvue点击按钮获取button值的方法
May 29 Javascript
uni-app 组件里面获取元素宽高的实现
Dec 27 Javascript
javascript运行机制之执行顺序理解
Aug 03 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 #Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 #Javascript
详解ES6 Symbol 的用途
Oct 14 #Javascript
javascript实现文本框标签验证的实例代码
Oct 14 #Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 #Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 #Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 #Javascript
You might like
php实现用户在线时间统计详解
2011/10/08 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
限制文本字节数js代码
2007/03/06 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python版微信红包分配算法
2015/05/04 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
python实现简易内存监控
2018/06/21 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
Hotels.com南非:酒店预订
2017/11/02 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
药学专业大学生自荐信
2013/09/28 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
化学教学随笔感言
2014/02/19 职场文书
实习护士自荐信
2014/06/21 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
迎新生标语大全
2014/10/06 职场文书
基层党支部整改方案
2014/10/25 职场文书
2015年手术室工作总结
2015/05/11 职场文书
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS