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基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
JS鼠标事件大全 推荐收藏
Nov 01 Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 Javascript
JS数组的常见用法实例
Feb 10 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
Angular Js文件上传之form-data
Aug 28 Javascript
AngularJS入门教程引导程序
Aug 18 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
Aug 22 Javascript
element-ui点击查看大图的方法示例
Dec 14 Javascript
如何在VUE中使用vue-awesome-swiper
Jan 04 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
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
深入理解Python装饰器
2016/07/27 Python
Python断言assert的用法代码解析
2018/02/03 Python
代码分析Python地图坐标转换
2018/02/08 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python 公共方法汇总解析
2019/09/16 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
电气个人求职信范文
2014/02/04 职场文书
劲霸男装广告词
2014/03/21 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
军训新闻稿范文
2015/07/17 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
解决Redis启动警告问题
2022/02/24 Redis