基于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解析JSON数据示例代码
Mar 17 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
浅谈JS封闭函数、闭包、内置对象
Jul 18 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
jquery实现回车键触发事件(实例讲解)
Nov 21 jQuery
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
Sep 16 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
Dec 04 Javascript
一篇文章弄清楚Ajax请求的五个步骤
Mar 17 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中cookie的作用域
2008/03/27 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
银行职员自我鉴定
2014/04/20 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript