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

 更新时间:2017年10月27日 08:20:09   作者:熊仔其人  
下面小编就为大家带来一篇基于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); //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和类型判断(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Webpack 之 babel-loader文件预处理器详解

    Webpack 之 babel-loader文件预处理器详解

    这篇文章主要介绍了Webpack 之 babel-loader文件预处理器详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 模仿百度三维地图的js数据分享

    模仿百度三维地图的js数据分享

    模仿百度三维地图的js数据,需要的朋友可以参考下。
    2011-05-05
  • 微信小程序页面上下滚动效果

    微信小程序页面上下滚动效果

    这篇文章主要为大家详细介绍了微信小程序页面上下滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • js实现分享到随页面滚动而滑动效果的方法

    js实现分享到随页面滚动而滑动效果的方法

    这篇文章主要介绍了js实现分享到随页面滚动而滑动效果的方法,实例分析了javascript操作页面元素滚动效果的方法,需要的朋友可以参考下
    2015-04-04
  • tangram框架响应式加载图片方法

    tangram框架响应式加载图片方法

    这篇文章主要介绍了使用tangram框架响应式加载图片的方法,大家可以参考使用
    2013-11-11
  • JavaScript中的标签语句用法分析

    JavaScript中的标签语句用法分析

    这篇文章主要介绍了JavaScript中的标签语句用法,实例分析了标签语句的功能、定义及相关使用技巧,需要的朋友可以参考下
    2015-02-02
  • 原生JS实现各种运动之复合运动

    原生JS实现各种运动之复合运动

    这篇文章主要为大家详细介绍了原生JS实现各种运动之复合运动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 使用微信SDK自定义分享的方法

    使用微信SDK自定义分享的方法

    这篇文章主要介绍了使用微信SDK自定义分享的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 基于JavaScript实现电子签名功能

    基于JavaScript实现电子签名功能

    这篇文章主要为大家详细介绍了如何通过JavaScript实现简单的电子签名功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-11-11
  • javascript实现的textarea运行框效果代码 不用指定id批量指定

    javascript实现的textarea运行框效果代码 不用指定id批量指定

    今天在写一个网页的时候用到了N多嵌套在textarea标签里的代码,定义双击运行其内的代码段。但是每次创建一个这样的可运行的实例都要给textarea元素自定义一个id值和写入双击事件,好不麻烦。
    2009-12-12

最新评论