基于javascript中的typeof和类型判断(详解)


Posted in Javascript onOctober 27, 2017

typeof

ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。我们都知道可以使用typeof运算符求得一个变量的类型,但是对引用类型变量却只会返回object,也就是说typeof只能正确识别基本类型值变量。

var a = "abc";
console.log(typeof a); // "string"
var b = 123;
console.log(typeof b); // "number"
var c = true;
console.log(typeof c); // "boolean"
var d = null;
console.log(typeof d); // "object"
var f = undefined;
console.log(typeof f); // "undefined"
var g;
console.log(typeof g); // "undefined"

console.log(typeof x); // "undefined"

您也许会问,为什么 typeof 运算符对于 null 值会返回 "object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

最后一个比较奇怪,typeof一个不存在的变量x居然返回了"object"而不是"undefined"。

我们在来如下代码:

var a = function() { };
console.log(typeof a); // "function"
var b = [1,2,3]; 
console.log(typeof b); // "object"
var c = { };
console.log(typeof c); // "object"

对于数组和对象都返回"object",因此我们日常开发中一个常见需求就是如何判断变量是数组还是对象。

类型判断

类型判断,一般就是判断是否是数组,是否是空对象。这是针对这个需求,我日常用过或见过的判断方法

判断是否是数组

有数组:var a = [1,2,3,4,5];

方法一:

toString.call(a); // "[object Array]"方法二:

a instanceof Array; //true方法三:

a.constructor == Array; //true 第一种方法比较通用,也就是Object.prototype.toString.call(a)的简写。

instanceof和constructor判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个a,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor会返回false;

var a = [1,2,3,4,5];
console.log(toString.call(a)); // "[object Array]"      
console.log(a instanceof Array); //true
console.log(a.constructor == Array); //true

判断是否是空对象

有变量:var obj = {};

方法一:

JSON.stringify(obj); // "{}"通过转换成JSON对象来判断是否是空大括号

方法二:

if(obj.id){ //如果属性id存在....}这个方法比较土,大多数人都能想到,前提是得知道对象中有某个属性。

方法三:

function isEmptyObject(e) { 
var t; for (t in e) return !1; return !0 } //trueisEmptyObject(obj);
//falseisEmptyObject({ "a":1, "b":2});

这个方法是jQuery的isEmptyObject()方法的实现方式。

以上这篇基于javascript中的typeof和类型判断(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Mootools 1.2教程(2) DOM选择器
Sep 14 Javascript
jQuery仿Excel表格编辑功能的实现代码
May 01 Javascript
js下将金额数字每三位一逗号分隔
Feb 19 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
Mar 08 Javascript
mpvue小程序仿qq左滑置顶删除组件
Aug 03 Javascript
vue devtools的安装与使用教程
Aug 08 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 Javascript
vue视频播放插件vue-video-player的具体使用方法
Nov 08 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
webpack配置之后端渲染详解
Oct 26 #Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 #Javascript
node文字生成图片的示例代码
Oct 26 #Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 #Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 #Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 #Javascript
You might like
《心理测量者3》剧场版动画预告
2020/03/02 日漫
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
Python中下划线的使用方法
2015/03/27 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
医学生职业规划范文
2014/01/05 职场文书
婚礼秀策划方案
2014/05/19 职场文书
生产助理岗位职责
2014/06/18 职场文书
表扬通报怎么写
2015/01/16 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Python实现抖音热搜定时爬取功能
2022/03/16 Python