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 相关文章推荐
JQuery Dialog的内存泄露问题解决方法
Jun 18 Javascript
CSS(js)限制页面显示的文本字符长度
Dec 27 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
Feb 05 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
JS实现鼠标滑过显示边框的菜单效果
Sep 21 Javascript
解析js如何获取css样式
Dec 11 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
Jul 20 Javascript
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
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
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python调用shell的方法
2013/11/20 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
生产厂长岗位职责
2014/02/21 职场文书
高中军训第一天感言
2014/03/06 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
助学贷款贫困证明
2014/09/23 职场文书
工作作风建设心得体会
2014/10/22 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
西湖英语导游词
2015/02/06 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
话题作文之自信作文
2019/11/15 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL