typeof
如果使用typeof來判斷資料型別的話,結果如下:
console.
log(
typeof
123,
//"number"
typeof
'dsfsf'
,//"string"
typeof
false
,//"boolean"
typeof[1
,2,3
],//"object"
typeof
,//"object"
typeof
function()
,//"function"
typeof undefined,
//"undefined"
typeof
null
,//"object"
typeof
newdate()
,//"object"
typeof/^
[a-za-z]
$/,//"object"
typeof
newerror()
//"object"
);
以上結果都是在chrome瀏覽器裡執行結果,可以發現如下規律
array,object,null,date,regexp,error這幾個型別都被typeof判斷為object,所以如果想要判斷這幾種型別,就不能使用typeof了。
number,string,boolean,function,undefined,如果想判斷這幾種型別,那就可以使用typeof。
instanceof
除了使用typeof來判斷,還可以使用instanceof。instanceof運算子需要指定乙個建構函式,或者說指定乙個特定的型別,它用來判斷這個建構函式的原型是否在給定物件的原型鏈上。
結果如下:
console.
log(
123instanceof
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
newdate()
instanceof
date
,//true/^
[a-za-z]
$/instanceof
regexp
,//true
newerror()
instanceof
error
//true
)
可以發現如下規律:
number,string,boolean沒有檢測出他們的型別,但是如果使用下面的寫法則可以檢測出來:
var num =
newnumber
(123);
var str =
newstring
('dsfsf');
var boolean =
newboolean
(false
);
還需要注意null和undefined都返回了false,這是因為它們的型別就是自己本身,並不是object建立出來它們,所以返回了false。
constructor
constructor是prototype物件上的屬性,指向建構函式。根據例項物件尋找屬性的順序,若例項物件上沒有例項屬性或方法時,就去原型鏈上尋找,因此,例項物件也是能使用constructor屬性的。
如果輸出乙個型別的例項的constructor,就如下所示:
console.
log(
newnumber
(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 =
newdate()
;var reg =
/^[a-za-z]$/
;var error=
newerror()
;function
person()
var tom =
newperson()
;// 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');
}
這樣判斷乙個變數的資料型別就很方便了。 Struts幾種資料型別的xml資料校驗
struts2 的驗證規則大概有以下數種 required 必填校驗器 requiredstring 必填字串校驗器 int 整數校驗器 double 雙精度浮點數校驗器 date 日期校驗器 expression 表示式校驗器 fieldexpression 字段表示式校驗器 email 電子郵件...
資料型別基礎資料型別
資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...
資料型別 基本資料型別和引用資料型別
一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...