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 相关文章推荐
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
Vue.js特性Scoped Slots的浅析
Feb 20 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 Javascript
Vue实现导航栏点击当前标签变色功能
Aug 19 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
JavaScript实现猜数字游戏
May 20 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 高手之路(一)
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
python with statement 进行文件操作指南
2014/08/22 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
python对csv文件追加写入列的方法
2019/08/01 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python线程的几种创建方式详解
2019/08/29 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
农林环境专业求职信
2014/03/13 职场文书
培训研修方案
2014/06/06 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
民事起诉状范文
2015/05/19 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
instantclient客户端 连接oracle数据库
2022/04/26 Oracle