typeof、instanceof、constructor、object.prototype.tostring.call()、jquery.type()
1 .typeof
console.log(
typeof 100, //"number"
typeof 'abc', //"string"
typeof false, //"boolean"
typeof undefined, //"undefined"
typeof null, //"object"
typeof [1,2,3], //"object"
typeof , //"object"
typeof function(), //"function"
typeof new date(), //"object"
typeof /^[a-za-z]$/, //"object"
typeof new error() //"object"
typeof new number(100), //'object'
typeof new string('abc'),// 'string'
typeof new boolean(true),//'boolean'
);
基本資料型別中:number,string,boolean,undefined 以及引用資料型別中function ,可以使用typeof檢測資料型別,分別返回對應的資料型別小寫字元。
另:用typeof檢測建構函式建立的number,string,boolean都返回object
基本資料型別中:null 。引用資料型別中的:array,object,date,regexp。不可以用typeof檢測。都會返回小寫的object
2 . instanceof
除了使用typeof來判斷,還可以使用instanceof。instanceof運算子需要指定乙個建構函式,或者說指定乙個特定的型別,它用來判斷這個建構函式的原型是否在給定物件的原型鏈上。
console.log(
100 instanceof number, //false
'dsfsf' instanceof string, //false
false instanceof boolean, //false
undefined instanceof object, //false
null instanceof object, //false
[1,2,3] instanceof array, //true
instanceof object, //true
function() instanceof function, //true
new date() instanceof date, //true
/^[a-za-z]$/ instanceof regexp, //true
new error() instanceof error //true
)
基本資料型別中:number,string,boolean。字面量值不可以用instanceof檢測,但是建構函式建立的值可以,如下:
var num = new number(123);
var str = new string('dsfsf');
var boolean = new boolean(false);
還需要注意null和undefined都返回了false,這是因為它們的型別就是自己本身,並不是object建立出來它們,所以返回了false。
3 .constructor
constructor是prototype物件上的屬性,指向建構函式。根據例項物件尋找屬性的順序,若例項物件上沒有例項屬性或方法時,就去原型鏈上尋找,因此,例項物件也是能使用constructor屬性的。
如果輸出乙個型別的例項的constructor,就如下所示:
console.log(new number(123).constructor)
//ƒ number()
可以看到它指向了number的建構函式,因此,可以使用num.constructor==number來判斷乙個變數是不是number型別的。
var num = 123;
var str = 'abcdef';
var bool = true;
var arr = [1, 2, 3, 4];
var json = ;
var func = function()
var und = undefined;
var nul = null;
var date = new date();
var reg = /^[a-za-z]$/;
var error= new error();
function person()
var tom = new person();
// undefined和null沒有constructor屬性
console.log(
tom.constructor==person,
num.constructor==number,
str.constructor==string,
bool.constructor==boolean,
arr.constructor==array,
json.constructor==object,
func.constructor==function,
date.constructor==date,
reg.constructor==regexp,
error.constructor==error
);//所有結果均為true
除了undefined和null之外,其他型別都可以通過constructor屬性來判斷型別。
4 . 使用object.prototype.tostring.call()檢測物件型別
var tostring = object.prototype.tostring;
tostring.call(123); //"[object number]"
tostring.call('abcdef'); //"[object string]"
tostring.call(true); //"[object boolean]"
tostring.call([1, 2, 3, 4]); //"[object array]"
tostring.call(); //"[object object]"
tostring.call(function()); //"[object function]"
tostring.call(undefined); //"[object undefined]"
tostring.call(null); //"[object null]"
tostring.call(new date()); //"[object date]"
tostring.call(/^[a-za-z]$/); //"[object regexp]"
tostring.call(new error()); //"[object error]"
這樣可以看到使用object.prototype.tostring.call()
的方式來判斷乙個變數的型別是最準確的方法。
5 .無敵萬能的方法:jquery.type()
如果物件是undefined或null,則返回相應的「undefined」或「null」。
jquery.type( undefined ) === "undefined"
jquery.type() === "undefined"
jquery.type( window.notdefined ) === "undefined"
jquery.type( null ) === "null"
如果物件有乙個內部的[[class]]和乙個瀏覽器的內建物件的 [[class]] 相同,我們返回相應的 [[class]] 名字。 (有關此技術的更多細節。 )
jquery.type( true ) === "boolean"
jquery.type( 3 ) === "number"
jquery.type( "test" ) === "string"
jquery.type( function(){} ) === "function"
jquery.type( ) === "array"
jquery.type( new date() ) === "date"
jquery.type( new error() ) === "error" // as of jquery 1.9
jquery.type( /test/ ) === "regexp"
其他一切都將返回它的型別「object」
6 . 自己也可以封裝乙個獲取變數準確型別的函式
function gettype(obj)
//如果不是object型別的資料,直接用typeof就能判斷出來
//如果是object型別資料,準確判斷型別必須使用object.prototype.tostring.call(obj)的方式才能判斷
return object.prototype.tostring.call(obj).replace(/^\[object (\s+)\]$/, '$1');
}
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 判斷...