js的基本資料型別:string、number、boolean、null、undefined、symbol(es6);
引用型別:object
一、typeof:(可以對基本型別(包括function)做出準確的判斷
引用型別就只會返回object;
二、求得物件的具體型別
1. instanceof
運算子用於測試 建構函式的prototype屬性是否出現在物件的原型鏈中的任何位置.
a instanceof b : 當 a 的__proto__
指向 b 的prototype
時,就認為 a 就是 b 的例項.
用於判斷物件a是不是b建構函式構造出來的---->看a的原型鏈上有沒有b的原型
1>當用來判斷是object還是array時,
var arr = ;
arr instanceof array
true
arr instanceof object
true
2> instanceof 操作符,它假定只有乙個全域性執行環境。如果網頁中包含多個框架,那實際上就存在兩個以上不同的全域性執行環境,從而存在兩個以上不同版本的建構函式。如果你從乙個框架向另乙個框架傳入乙個陣列,那麼傳入的陣列與在第二個框架中原生建立的陣列分別具有各自不同的建構函式
var iframe = document.createelement('iframe');
aarray = window.frames[0].array;
var arr = new aarray(1,2,3);
此時:
arr instanceof array
false
如果是
var arr = new array(1,2,3);
此時:
arr instanceof array
true
為了解決這個問題, ecmascript 5 新增了array.isarray() 方法。這個方法的目的是最終確定某個值到底是不是陣列,而不管它是在哪個全域性執行環境中建立的。
var arr = ;
array.isarray(arr)
2、constructor 判斷物件的構造方法
而乙個物件的構造方法是可以被改變的:
function a(){}
function b(){}
a.prototype.constructor = b;//此時我們就修改了a建構函式的指向問題
var aa = new a();
console.log(aa.constructor == a);//false
console.log(aa.constructor == b);//true
此時的結果就傾向了與真實錯誤的構造方法。
3、tostring
tostring是object原型物件上的乙個方法,該方法預設返回其呼叫者的具體型別。
使用:object.prototype.tostring.call(value) ->找到object原型上的tostring方法,讓方法執行,並且讓方法中的this變為value(要檢測的值)
object.prototype.tostring常用來判斷物件值屬於哪種內建屬性,它返回乙個json字串——"[object 資料型別]";
var obj = {};
object.prototype.tostring.call(obj)
"[object object]"
var arr = ;
object.prototype.tostring.call(arr)
"[object array]"
這個方法很好的解決了跨frame物件構建的問題,經過測試,各大瀏覽器相容性也很好
注釋:
使用object.create()建立的js物件,沒有constructor;
var a = object.create(null)
a
文章著重於引用型別幾種判斷方法的用法和優缺點;以上**為在控制台執行形勢;( 作此總結) js判斷資料型別
1 typeof 形如 var x xx typeof x string 返回型別有 undefined string number boolean function object 缺點 對於object型別不能細分是什麼型別 優點 對空null的判斷 undefined 的應用 2 instanc...
js判斷資料型別
了解js的都知道,有個typeof 用來判斷各種資料型別,有兩種寫法 typeof typeof 如下例項 typeof 2 輸出 number typeof null 輸出 object typeof 輸出 object typeof 輸出 object typeof function 輸出 fu...
js判斷資料型別
1 判斷是否為陣列型別 2 判斷是否為字串型別 3 判斷是否為數值型別 isnan 變數 如果為true就是數字型別 注意這個函式一般針對數字型別來判斷是否值為nan,若變數為非數字型別,則先轉化為數字型別再做判斷,用此函式時,別忘考慮空串和空格 這倆轉化為數字是0 4 判斷是否為日期型別 5 判斷...