typeof
如果使用typeof來判斷資料型別的話,結果如下:
var num = new number('123');
var str = new string('1223');
var bool = new boolean(false);
console.log(
typeof 123, //"number"
typeof num, //"object"
typeof 'dsfsf', //"string"
typeof str,//"object"
typeof false, //"boolean"
typeof bool,//"object"
typeof [1,2,3], //"object"
typeof , //"object"
typeof function(), //"function"
typeof undefined, //"undefined"
typeof null, //"object"
typeof new date(), //"object"
typeof /^[a-za-z]$/, //"object"
typeof new error() //"object"
);
以上結果都是在chrome瀏覽器裡執行結果,可以發現如下規律
array,object,null,date,regexp,error這幾個型別都被typeof判斷為object,所以如果想要判斷這幾種型別,就不能使用typeof了。
number,string,boolean,function,undefined,如果想判斷這幾種型別,那就可以使用typeof。
instanceof
除了使用typeof來判斷,還可以使用instanceof。instanceof運算子需要指定乙個建構函式,或者說指定乙個特定的型別,它用來判斷這個建構函式的原型是否在給定物件的原型鏈上。
結果如下:
console.log(
123 instanceof number, //false
'dsfsf' instanceof string, //false
false instanceof boolean, //false
[1,2,3] instanceof array, //true
instanceof object, //true
function() instanceof function, //true
undefined instanceof object, //false
null instanceof object, //false
new date() instanceof date, //true
/^[a-za-z]$/ instanceof regexp, //true
new error() instanceof error //true
)
可以發現如下規律:
number,string,boolean沒有檢測出他們的型別,但是如果使用下面的寫法則可以檢測出來:
var num = new number(123);
var str = new string('dsfsf');
var boolean = new boolean(false);
還需要注意null和undefined都返回了false,這是因為它們的型別就是自己本身,並不是object建立出來它們,所以返回了false。
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屬性來判斷型別。
使用tostring()檢測物件型別
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()的方式來判斷乙個變數的型別是最準確的方法。
封裝乙個獲取變數準確型別的函式
function gettype(obj)
//如果不是object型別的資料,直接用typeof就能判斷出來
//如果是object型別資料,準確判斷型別必須使用object.prototype.tostring.call(obj)的方式才能判斷
return object.prototype.tostring.call(obj).replace(/^\[object (\s )\]$/, '$1');
}
這樣判斷乙個變數的資料型別就很方便了。
更多專業前端知識,請上
【猿2048】www.mk2048.com
判斷資料型別
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 但是對於一些建立的物件,它...
判斷資料型別
1 typeof 只能判斷基本資料型別,不能判斷引用資料型別 判斷出來的都是object string number boolean undefined object function symbol 2 instanceof 判斷乙個物件是否是乙個類的例項 只能進行型別的對比,不能進行型別的判斷 3...