資料型別校驗

2021-10-14 15:17:01 字數 4711 閱讀 1753

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 宣告的變...