基于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 相关文章推荐
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
Jun 01 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 Javascript
AngularJS入门教程之表单校验用法示例
Nov 02 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
如何理解Vue的.sync修饰符的使用
Aug 17 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
Sep 29 Javascript
微信小程序8种数据通信的方式小结
Feb 03 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代码
2012/06/08 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
上课打牌的检讨书
2014/02/15 职场文书
青春寄语大全
2014/04/09 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
人力资源管理求职信
2014/08/07 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
辞职信格式模板
2015/02/27 职场文书
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang