基于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 相关文章推荐
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
Jan 11 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 Javascript
JavaScript中的this引用(推荐)
Aug 05 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
vue实现表单录入小案例
Sep 27 Javascript
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
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
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
ie与ff下的event事件使用介绍
2013/11/25 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
新任教师自我鉴定
2014/02/24 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
交通安全教育心得体会
2016/01/15 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python