基于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代码(亲测兼容IE,Firefox,chrome等浏览器)
Nov 18 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
May 28 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
Aug 26 Javascript
理解javascript中的闭包
Jan 11 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 Javascript
vue 组件销毁并重置的实现
Jan 13 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 的几个配置文件函数
2006/12/21 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
python如何输出反斜杠
2020/06/18 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
Django跨域请求原理及实现代码
2020/11/14 Python
python如何修改文件时间属性
2021/02/05 Python
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
一月红领巾广播稿
2014/02/11 职场文书
团队精神口号
2014/06/06 职场文书
校长创先争优承诺书
2014/08/30 职场文书
个人四风对照检查材料
2014/09/26 职场文书
员工年度工作总结2015
2015/05/18 职场文书