這次帶給大家JS中typeof和型別判斷(附程式碼),JS中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()方法的實作方式。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是JS中typeof和類型判斷(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!