当前位置:首页 > 日记 > 正文

基于javascript中的typeof和类型判断 | 详解

基于javascript中的typeof和类型判断 | 详解

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); //trueconsole.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和类型判断(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

相关文章

CorelDRAW2017怎么正确安装?

CorelDRAW2017怎么正确安装?

安装,正确,电脑软件,4月12日,CorelDRAW迎来了它的新版本--CorelDRAW Graphics Suite 2017。CorelDRAW 2017 的推出让最好的产品变得更好了,它是我们迄今最具创意的最新图形设计程序!作为一个强大的绘图软件,CorelDRAW 2017一经发布便吸引了众多…

ps怎么设计绚丽的彩色背景条效果图

ps怎么设计绚丽的彩色背景条效果图

效果图,绚丽,彩色,背景,电脑软件,ps中想要做一个彩色的斜条纹作为背景,该怎么设计呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、新建ps文件2、执行滤镜>渲染>云彩,效…

mac版微信账号登录方法

mac版微信账号登录方法

登录,方法,账号,电脑软件,mac,  Mac微信是腾讯的一款mac端的微信辅助软件,您可以通过登录mac微信来收取微信信息,不用频繁地查看手机信息,那么微信mac版怎么登录呢?下面就跟小编来了解一下吧!mac版微信账号登录方法  首先,您需要在电脑中下…

PS图层样式和图层叠加绘制Q版游戏

PS图层样式和图层叠加绘制Q版游戏

图层,叠加,绘制,样式,按钮,这篇教程教的朋友们使用PS绘制Q版游戏水晶按钮,教程主要介绍的知识点是使用PS图层样式和图层叠加来刻画质感。对于学习UI设计,或者是游戏设计的朋友来说还是挺实用的,推荐过来和的朋友们一起分享、一起学习了,我们先…

word2010设置页码的两种方法word20

word2010设置页码的两种方法word20

设置,方法,页码,两种,电脑软件,  我们编辑好一个word2010文档,如果需要插入页码,或者需要编辑目录,那么一定需要插入页码,那么下面就由小编给大家分享下word2010设置页码的技巧,希望能帮助到您。word2010设置页码方法一步骤一:打开或者新建一个…

js如何获取网页所有

js如何获取网页所有

网页,电脑软件,js,需求在网页中单击某张图片,图片能放大显示,且能按顺序切换图片,同时,一些小图标和不符合要求的图片不能放大。 由于网页是在app中打开,图片的放大与切换由移动端实现,因此,需要用js调用原生方法,并传递所有图片的url解决var img =…

JavaScript的setter与getter方法

JavaScript的setter与getter方法

方法,电脑软件,JavaScript,setter,getter,以前在写项目过程一直都没有使用过Javascript的setter与getter方法,所以对其是一种要懂不懂的概念;今天看书看到这个知识点,还是模模糊糊的,于是就打算研究研究;Javascript对象的属性是由名字,值和一组特…

JavaScript变量类型以及变量作用域

JavaScript变量类型以及变量作用域

变量类型,变量作用域,详解,电脑软件,JavaScript,变量类型ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型。基本类型基本类型指的是简单的数据段,5种基本数据类型:undefined、null、boolean、number、string,基本数据类型是按…

在Excel表格中怎么插入图表气泡图

在Excel表格中怎么插入图表气泡图

气泡,图表,表格,电脑软件,Excel,  你有没有在Excel工作表中插入过气泡图呢?在很多情况下,大部分用户选择了柱形图或者是折线图,其实在我们的软件中气泡图也是值得大家一试的。以下是小编为您带来的关于在Excel表格中插入气泡图,希望对您有所…

JSP 注释的详解及简单实例

JSP 注释的详解及简单实例

简单实例,注释,详解,电脑软件,JSP, JSP 注释的详解及简单实例一 三种格式二 举例<body> <h1>大家好</h1> <hr> <!-- 我是HTML注释,在客户端可见 --> <%-- 我是JSP注释,在客户端不可见 --%> <% //单行注释 /*多行注释*/ out.p…

PHP实现的回溯算法示例

PHP实现的回溯算法示例

算法示例,回溯,电脑软件,PHP,本文实例讲述了PHP实现的回溯算法。分享给大家供大家参考,具体如下:问题: 一头大牛驼2袋大米,一头中牛驼一袋大米,两头小牛驼一袋大米,请问100袋大米需要多少头大牛,多少头中牛,多少头小牛?实现代码:<?php/* * k = 2x + y…

Photoshop绘制立体漂亮的拾色器图

Photoshop绘制立体漂亮的拾色器图

图标,教程,绘制,漂亮,电脑软件,使用Photoshop绘制立体漂亮的拾色器图标教程,步骤大致分为制作拾色器的底盘、绘制拾色器的内层两大部分,主要用到了图层样式,绘制的拾色器图标非常的精致漂亮,小编很喜欢,推荐给的朋友一起分享学习!效果图:主要过程:1…