由於剛纔參加了一個公司的在線筆試,在檢測類型這方面出了點小亂子,所以寫篇文章做個筆記。
typeof操作符
- “undefined”——如果這個值未定義;
- “boolean”——如果這個值是布爾值;
- “string”——如果這個值是字符串;
- “number”——如果這個值是數值;
- “object”——如果這個值是對象或null;
- “function”——如果這個值是函數。
var arr = [];var str = 'string';var num = 100;var fun = function() { console.log('this is a test.');};var obj = {};var nothing;var bool = true;console.log(typeof arr); // objectconsole.log(typeof str); // stringconsole.log(typeof num); // numberconsole.log(typeof fun); // fucntionconsole.log(typeof obj); // objectconsole.log(typeof nothing); // undefinedconsole.log(typeof bool); // boolean
由上可知,typeof對於Object、Array、Null都會返回對象,同時,在Safari及之前的版本、Chrome7及之前的版本對正則表達式使用typeof操作符時會返回“function”,而其他瀏覽器在這種情況下會返回“object”。另外,在使用typeof操作符時,也可當其爲函數一樣使用,例如typeof(90);返回“number”。
instanceof操作符
var Object1 = function() { this.name = 'paper_crane'; this.age = 22; } var Object2 = function() { this.name = 'paperCrane'; this.school = 'sysu'; } var arr = []; var obj1 = new Object1(); var obj2 = new Object2(); console.log(obj1 instanceof Object) console.log(obj1 instanceof Object1); // true console.log(obj1 instanceof Object2); // true console.log(obj2 instanceof Object2); // true console.log(obj2 instanceof Object1); // true console.log(arr instanceof Array); // true console.log(null instanceof Object); // false
由上面的示例可以看出,instanceof操作符能夠判斷一個實例的類型,但是這個函數也有其缺陷:它假定只有一個全局執行環境。如果網絡中包含過個框架,那麼實際上就存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的Array構造函數。此時,檢測是都是數組類型的最好方法是使用Array.isArray(params)函數,可以準確的檢測其是否是數組。