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 相关文章推荐
javascript Ext JS 状态默认存储时间
Feb 15 Javascript
javascript中的prototype属性实例分析说明
Aug 09 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
AngularJS 单元测试(一)详解
Sep 21 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 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的curl函数的用法总结
2019/02/14 PHP
javascript prototype 原型链
2009/03/12 Javascript
javascript事件问题
2009/09/05 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
js中的string.format函数代码
2020/08/11 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
深入理解Django-Signals信号量
2019/02/19 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python笔记之工厂模式
2019/11/20 Python
python中如何设置代码自动提示
2020/07/15 Python
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
主管职责范文
2013/11/09 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
运动会稿件300字
2014/02/14 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
文案策划求职信
2014/04/14 职场文书
文明倡议书范文
2014/04/15 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
2014年环保局工作总结
2014/12/11 职场文书
雷锋的观后感
2015/06/10 职场文书
企业愿景口号
2015/12/25 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS