基于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优先加载笔记代码
Sep 30 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
使用jQuery重置(reset)表单的方法
May 05 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
完美解决JS文件页面加载时的阻塞问题
Dec 18 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
Dec 24 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
Mar 03 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
layer.js open 隐藏滚动条的例子
Sep 05 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
收音机的保养
2021/03/01 无线电
PHP实现加密的几种方式介绍
2015/02/22 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
pip install urllib2不能安装的解决方法
2018/06/12 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python读取ini配置文件过程示范
2019/12/23 Python
pytorch梯度剪裁方式
2020/02/04 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
公务员考察材料范文
2014/12/23 职场文书
公司员工辞职信范文
2015/05/12 职场文书
工作年限证明模板
2015/06/15 职场文书
安全生产标语口号
2015/12/26 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python