基于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 相关文章推荐
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
js算法中的排序、数组去重详细概述
Oct 14 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
Oct 28 Javascript
Javascript动画效果(3)
Oct 11 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
JavaScript编码小技巧分享
Sep 17 Javascript
node koa2 ssr项目搭建的方法步骤
Dec 11 Javascript
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的字符串用法小结
2010/06/08 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
PHP实现简易blog的制作
2016/10/24 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
python pandas生成时间列表
2019/06/29 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
幼儿园大班教学反思
2014/02/10 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
2015年护士节慰问信
2015/03/23 职场文书
运动会通讯稿50字
2015/07/20 职场文书
element多个表单校验的实现
2021/05/27 Javascript