/**
* 判斷乙個 變數 的型別,是 陣列、字串、還是物件或者函式等複雜型別。
*/// 首先宣告一些變數
const str = "string",
num = 12,
isbool = true,
isundefined = undefined,
isnull = null,
obj = ,
arr = [1],
fun = () => {};
/** * 先看最簡單的 typeof 方法
*/console.log(typeof str);
console.log(typeof num);
console.log(typeof isbool);
console.log(typeof isundefined);
console.log(typeof isnull);
console.log(typeof obj);
console.log(typeof arr);
console.log(typeof fun);
/** * 輸出:string
* number
* boolean
* undefined
* object
* object
* object
* function
* * typeof 能判斷簡單型別的變數,但是對於引用型別的陣列,物件等卻無法區別
* 都會識別為 object
* */
/** * 使用 instanceof 方法
*/console.log(str instanceof string); // false
console.log(num instanceof number); // false
console.log(isbool instanceof boolean); // false
// console.log(isundefined instanceof undefined); // 報錯
// console.log(isnull instanceof null); // 報錯
console.log(obj instanceof object); // true
console.log(arr instanceof object); // true
console.log(arr instanceof array); // true
console.log(fun instanceof object); // true
console.log(fun instanceof function); // true
/** * 從上面結果可以看出:
* 對於簡單型別的字面量宣告,使用 instanceof 方法無法判斷型別
* 對於複雜型別 instanceof 方法對於 object 都會返回true,因為 陣列,函式本質來說都是物件。
* instanceof 方法的作用是:檢測建構函式的 prototype 屬性是否出現在某個例項物件的原型鏈。
* 即,fun instanceof object 說明 fun 在 object 的原型鏈上。並不是乙個物件。
* arr, fun 都會沿著原型鏈找到 object 所以,也會返回true,使用時要注意。
*/let str1 = new string("12");
console.log(`這是乙個字串:$`); // 這是乙個字串:12
console.log(typeof str1); // object
console.log(str1 instanceof string); // true
/** * 此時 str1 能沿著原型鏈找到 string
*//**
* 使用 原型方法 進行判斷
*/console.log(object.prototype.tostring.call(str)); // [object string]
console.log(object.prototype.tostring.call(num)); // [object string]
console.log(object.prototype.tostring.call(isbool)); //
console.log(object.prototype.tostring.call(isundefined)); //
console.log(object.prototype.tostring.call(isnull)); //
console.log(object.prototype.tostring.call(obj)); //
console.log(object.prototype.tostring.call(arr)); //
console.log(object.prototype.tostring.call(fun)); //
/** * [object string]
* [object number]
* [object boolean]
* [object undefined]
* [object null]
* [object object]
* [object array]
* [object function]
* * 利用原型上的方法可以正確的判斷出元素型別
* */
/** * 上述三種方法的優劣:
* array.isarray 優於 instanceof, 因為array.isarray能檢測iframes。
* * objec.prototype.tostring.call() 對於所有的基本資料型別都能進行判斷,包括 undefined 、null。常用於判斷瀏覽器內建物件。
* * instanceof 的內部機制是通過判斷物件的原型鏈中是不是能找到型別的 prototype。
* 使用 instanceof判斷乙個物件是否為陣列,instanceof 會判斷這個物件的原型鏈上是否會找到對應的 array 的原型,找到返回 true,否則返回 false。
* instanceof 只能用來判斷物件型別,原始型別不可以。並且所有物件型別 instanceof object 都是 true
* * array.isarray()是es5新增的方法,當不存在 array.isarray()
* 可以用 object.prototype.tostring.call() 實現。如下例子:
*/if (!array.isarray) ;
}// array.isarray 的效能最好,instanceof 比 tostring.call 稍微好了一點點。
判斷資料型別
typeof 如果使用typeof來判斷資料型別的話,結果如下 var num new number 123 var str new string 1223 var bool new boolean false console.log typeof 123,number typeof num,obj...
判斷資料型別
typeof 判斷基本資料型別 不能區分null object 弊端不能區分 陣列 物件 和 null console.log typeof dddd console.log typeof 12 console.log typeof true console.log typeof undefined...
資料型別判斷
可以判斷基本資料型別,它返回的資料型別的字串 返回結果只能包括number,boolean,string,function,object,undefined 但不能判斷null array,可以使用typeof判斷變數是否存在 如if typeof a undefined 但是對於一些建立的物件,它...