基于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 相关文章推荐
JavaScript confirm选择判断
Oct 18 Javascript
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
利用Angular.js限制textarea输入的字数
Oct 20 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
Scala解析Json字符串的实例详解
Oct 11 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 Javascript
Javascript call及apply应用场景及实例
Aug 26 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
Python3使用requests发闪存的方法
2016/05/11 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python编写一个优美的下载器
2018/04/15 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
详解Python字典的操作
2019/03/04 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
简单的辞职信范文
2014/01/18 职场文书
一年级语文教学反思
2014/02/13 职场文书
副董事长岗位职责
2014/04/02 职场文书
《学会合作》教学反思
2014/04/12 职场文书
工商管理专业自荐信
2014/06/03 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
会计岗位职责范本
2015/04/02 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js
python处理json数据文件
2022/04/11 Python