JavaScript檢測數據類型

1.typeof

typeof 操做符是肯定一個變量是StringNumberBoolean,仍是undefined的最佳工具

引用來源:《JavaScript高級程序設計》圖靈程序設計叢書javascript

看下面例子:java

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,儘管下面的例子看起來很矛盾prototype

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"
相關文章
相關標籤/搜索