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 被認爲是對象的佔位符,從而解釋了這一矛盾,但從技術上來講,它仍然是原始值。spa

最後一個比較奇怪,typeof一個不存在的變量x竟然返回了"object"而不是"undefined"。prototype

咱們在來以下代碼:code

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",所以咱們平常開發中一個常見需求就是如何判斷變量是數組仍是對象。對象

類型判斷blog

類型判斷,通常就是判斷是不是數組,是不是空對象。這是針對這個需求,我平常用過或見過的判斷方法ip

判斷是不是數組開發

有數組:var a = [1,2,3,4,5];string

方法一:

toString.call(a); // "[object Array]"

方法二:

a instanceof Array; //true

方法三:

a.constructor == Array; //true

第一種方法比較通用,也就是Object.prototype.toString.call(a)的簡寫。

instanceofconstructor判斷的變量,必須在當前頁面聲明的,好比,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明瞭一個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()方法的實現方式。

相關文章
相關標籤/搜索