檢驗數據類型的四個方法

檢驗數據類型的幾個方法 ,如有不對,請大佬指點

  1. typeof 可以檢測一些基本的數據類型,語法上可以選擇加括號不加都可以的。但是注意 在檢驗 數組、對象、正則、null 的時候返回的都是Object,所以有時要針對對象或數組做些判斷就不是很好了。
    請看示例:
console.log(typeof "你好呀"); 輸出結果 String
console.log(typeof 1); 輸出結果 Number
console.log(typeof false); 輸出結果 Boolean
console.log(typeof undefined); 輸出結果 undefined
console.log(typeof /$/); 輸出結果 Object
console.log(typeof null); 輸出結果 Object
console.log(typeof []); 輸出結果 Object
console.log(typeof {}); 輸出結果 Object
console.log(typeof function () {}); 輸出結果 function
  1. constructor 構造函數,
    請看示例:
console.log(("你好").constructor === String);  輸出結果 true
console.log(([]).constructor === Array);  輸出結果 true
console.log(({}).constructor === Object);  輸出結果 true
console.log((1).constructor === Number);  輸出結果 true
console.log((true).constructor === Boolean);  輸出結果 true
console.log((function () {}).constructor === Function);  輸出結果 true
console.log((/$/).constructor === RegExp);  輸出結果 true
// console.log((null).constructor === null);  輸出結果 報錯
// console.log((undefined).constructor === undefined);  輸出結果 報錯

如果不算 null 與 undefined 的話 constructor基本可以應對基本數據類型與引用數據類型的數據類型是啥,但 事實還是有些偏差,constructor並不可靠,容易被修改 即使被修改了,也不會影響代碼的正常運行。
正常開發的時候,constructor不小心被修改了,爲了方便維護,和開發,可以手動更正constructor的指向。
請看示例:

function fn() {}
let f = new fn;
console.log(f.constructor.name);  輸出結果 'fn'
console.log(fn.constructor);  輸出結果 Function(){}
console.log(Function.constructor);  輸出結果 Function(){}
  1. instanceof 檢測當前實例是否隸屬於某各類。雙目運算符 a instanceof b ,判斷a的構造器是否爲 b,返回值爲布爾值
    但是 如果直接對對象字面量創建的基礎數據類型做驗證 返回的卻不是所屬類型,而引用數據類型的驗證卻是正常的。如果我們以new字符去創建基礎數據類型,此時的結果纔是所屬數據類型。對於null 和 undefined 這兩個 我的理解是反正這兩個怎麼玩都是報錯 o(╯□╰)o
    請看示例:
console.log(("你好") instanceof String);  輸出結果 false
console.log((1) instanceof Number);  輸出結果 false
console.log((true) instanceof Boolean);  輸出結果 false

console.log(([]) instanceof Array);  輸出結果 true
console.log(({}) instanceof Object);  輸出結果 true
console.log((function () {}) instanceof Function);  輸出結果 true
console.log((/$/) instanceof RegExp);  輸出結果 true

console.log(new String("你好") instanceof String);  輸出結果 true
console.log(new Number(1) instanceof Number);  輸出結果 true
console.log(new Boolean(true) instanceof Boolean);  輸出結果 true

//console.log((null) instanceof null);   輸出結果 報錯
//console.log(new(null) instanceof null);   輸出結果 報錯
//console.log((undefined) instanceof undefined);  輸出結果 報錯
//console.log(new(undefined) instanceof undefined);  輸出結果 報錯
  1. Object.prototype.toString.call() 我認爲這個是最強大的方法(個人看法,不喜輕噴),就是長了點,當然 如果簡單地就隨意了。並且 我們改變原型也不會有任何影響
    請看示例:
let isType = (type) => {
      return Object.prototype.toString.call(type);
}
    
console.log(isType('111'));   輸出結果 [object String]
console.log(isType(111));   輸出結果 [object Number]
console.log(isType(true));   輸出結果 [object Boolean]
console.log(isType(['111']));   輸出結果 [object Array]
console.log(isType({a: '111'}));   輸出結果 [object Object]
console.log(isType(/$/));   輸出結果 [object RegExp]
console.log(isType(function () {}));   輸出結果 [object Function]

function abc() {};
abc.prototype = new Array();
console.log(isType(abc));   輸出結果 [object Function]
  1. isArray 判斷是否爲數組、 isNaN() 判斷是否是NaN,這兩個就簡單示範一下了。
    請看示例
console.log(Array.isArray([])); 輸出結果 true
console.log(Array.isArray(new Array()));  輸出結果 true
console.log(isNaN(NaN)); 輸出結果 true
console.log(isNaN(+"12ab")); 輸出結果 true
  1. hasOwnporperty 檢測當前屬性是否爲對象的私有屬性。語法: obj.hasOwnporperty(“屬性名(K值)”)
    請看示例:
let obj = {
	name:"xx"
};
console.log(obj.hasOwnProperty('name')); 輸出結果 true
console.log(obj.hasOwnProperty('xxxx')); 輸出結果 false

小汪還是一個小白,如有大佬指點,萬分感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章