资讯专栏INFORMATION COLUMN

JavaScript检测数据类型

wemall / 1322人阅读

摘要:操作符是确定一个变量是,还是的最佳工具引用来源高级程序设计图灵程序设计丛书看下面例子,都检测出来了,如果检测的是一个对象或者就会会返回,如下看吧,一点区分度也没有。

1.typeof
typeof 操作符是确定一个变量是StringNumberBoolean,还是undefined的最佳工具

引用来源:《JavaScript高级程序设计》图灵程序设计丛书

看下面例子:

var s = "hello";
var num = 10;
var bool = true;
var und;

typeof s;    // "string"
typeof num;  // "number"
typeof bool; // "boolean"
typeof und;  // "undefined"
ok,都检测出来了,but, 如果检测的是一个对象或者null,就会会返回Object,如下:
var n = null;
var o = new Object();

typeof n; // "object"
typeof o; // "object"

看吧,一点区分度也没有。

所以: 在检测基本数据类型时,typeof很好用,

在检测引用类型的值时,typeof的作用不大

2.instanceof
var o = new Object();
var arr = [];
var reg = /^abc$/

o instanceof Object   //true
arr instanceof Array  //true
reg instanceof RegExp //true

注意:使用instanceof操作符检测基本数据类型的值时,都会返回false,尽管下面的例子看起来很矛盾

null instanceof Object // false
typeof null // "object"
3.Object.prototype.toString()

ECMA-262 规范中,toString方法是这样定义的:

如果参数是未定义的值,则返回"[object Undefined]".

如果参数为null,则返回"[object Null]".

如果适用ToObject函数传递参数,则返回对象.

如果参数为类,则返回包含对象的类.(Let class be the value of the [[Class]] internal property of O.)

返回一个由"[对象", 类, 和"]"拼接而成的字符串.

它可以返回引用类型更精准的类型检测
var o = new Object();
var arr = [];
var reg = /^abc$/

Object.prototype.toString.call(o) // "[object Object]"
Object.prototype.toString.call(arr) // "[object Array]"
Object.prototype.toString.call(reg) // "[object RegExp]"
通过函数封装处理一下:
var type = function (o) {
    var s = Object.prototype.toString.call(o);
    return s.match(/[object (.*?)]/)[1];
}
type(o) // "Object"
type(reg) // "RegExp"
type(arr) // "Array"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103712.html

相关文章

  • JavaScript中的数据类型及其检测

    摘要:中的数据类型及其检测数据类型基本类型引用类型类型检测只能检测基本数据类型,对于还有一个用于检测某个对象的原型链是否包含某个构造函数的属性适用于检测对象,它是基于原型链运作的属性返回一个指向创建了该对象原型的函数引用,该属性的值是哪个函数本身 JavaScript中的数据类型及其检测 1. 数据类型 1.1 基本类型 Number String Boolean Null Undefin...

    Bryan 评论0 收藏0
  • javascript基础篇:JS中的数据类型检测专题

    摘要:用来检测数据类型的运算符语法虽然是基本数据类型值,但是它属于空对象指针,检测的结果是对象使用有自己的局限性,不能具体细分当前的值是数组还是正则也就是不能细分对象类型的值先算检测某一个实例是否属于某各类的实例构造函数使用检测某个值是否属于某 typeof 用来检测数据类型的运算符语法:typeof[value] typeof 12 //=>number typeof NaN //=>nu...

    Honwhy 评论0 收藏0
  • JavaScript检测原始值、引用值、属性

    摘要:检测函数从技术上讲,中的函数是引用类型,同样存在构造函数,每个函数都是其实例,比如不好的写法然而,这个方法亦不能跨帧使用,因为每个帧都有各自的构造函数,好在运算符也是可以用于函数的,返回。 上周写过一篇读书笔记《编写可维护的JavaScript》之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏<)。 在 Jav...

    刘德刚 评论0 收藏0
  • JavaScript数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    starsfun 评论0 收藏0
  • JavaScript数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    dingding199389 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<