基于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 相关文章推荐
js Dialog 实践分享
Oct 22 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
小程序自定义日历效果
Dec 29 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
微信小程序实现聊天室功能
Jun 14 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如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
javascript操作数组详解
2014/12/17 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
js实现图片实时时钟
2020/01/15 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
python更新列表的方法
2015/07/28 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python常用函数与用法示例
2019/07/02 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
Python更新所有已安装包的操作
2020/02/13 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
程序员机试试题汇总
2012/03/07 面试题
商务英语毕业生自荐信范文
2013/11/08 职场文书
办理退休介绍信
2014/01/09 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers