JavaScript检测数据类型

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://segmentfault.com/a/1190000018930779
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞