js資料型別的判斷主要有四種方法:typeof、instanceof、constructor、object.prototype.tostring.call()。
資料型別的包括:number、boolean、string、symbol、object、array、undefined、null、function等9種資料型別
7種資料型別有包含:基本型別值和引用型別值。 基本資料型別指的是簡單的資料段,而引用資料型別指那些可能有多個值組成的對。
基本型別(值型別)
複雜型別(引用型別)
引用型別的值是儲存在記憶體中的物件。與其他語言不同,js不允許直接訪問記憶體中的位置,也就是說不能直接操作物件的記憶體空間。 操作物件時,實際上是在操作物件的引用而不是實際的物件。(這種說法不太嚴謹,為物件新增屬性時,操作的是實際的物件)。
值型別與引用型別的差別
1.typeof
檢測基本資料型別的最佳選擇是使用typeof
eg:typeof symbol(); // symbol 有效
typeof 『』; //string 有效
typeof 1; //number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new function(); //function 有效
typeof null; // object 無效
typeof ; // object 無效
typeof new date(); // object 無效
typeof new regexp(); // object 無效
返回乙個表示資料型別的字串,返回結果包括:number、boolean、string、symbol、object、undefined、function等7種資料型別,但不能判斷null、array等
由結果可知,除了在檢測null時返回 object 和檢測function時放回function。對於引用型別返回均為object
2.instanceof
檢測引用型資料型別時的最佳選擇是instanceof
eg: instanceof array; //true
{} instanceof object; //true
new boolean instanceof boolean; // true
new date() instanceof date; //true
new regexp() instanceof regexp; //true
null instanceof null; // 報錯
undefined instanceof undefined; // 報錯
用來判斷a是否為b的例項,a instanceof b, 返回 boolean 值。instanceof 用來測試乙個物件在其原型鏈中是否存在乙個建構函式的 prototype 屬性,但它不能檢測 null 和 undefined
3.constructor
檢視物件對應的建構函式
object的每個例項都具有屬性constructor,儲存著用於建立當前物件的函式。
eg:console.log(bool.constructor === boolean); //true
console.log(num.constructor === number); //true
console.log(str.constructor === string); //true
console.log(arr.constructor === array); //true
console.log(obj.constructor === object); //true
console.log(fun.constructor === function); //true
undefined和null沒有contructor屬性
constructor不能判斷undefined和null,並且使用它是不安全的,因為contructor的指向是可以改變的。
4.object.prototype.tostring.call()
一般資料型別都能夠判斷,最準確最常用的一種
eg:console.log(object.prototype.tostring.call(bool)); // [object boolean]
console.log(object.prototype.tostring.call(num)); // [object number]
console.log(object.prototype.tostring.call(str)); // [object string]
console.log(object.prototype.tostring.call(und)); // [object undefined]
console.log(object.prototype.tostring.call(nul)); // [object null]
console.log(object.prototype.tostring.call(arr)); // [object array]
console.log(object.prototype.tostring.call(obj)); // [object object]
console.log(object.prototype.tostring.call(fun)); // [object function]
console.log(object.prototype.tostring.call(new date())) ; // [object date]
console.log(object.prototype.tostring.call(new regexp())) ; // [object regexp]
console.log(object.prototype.tostring.call(new error())) ; // [object error]
js判斷資料型別的幾種方法
判斷js中的資料型別有一下幾種方法 typeof instanceof constructor prototype type jquery.type 接下來主要比較一下這幾種方法的異同。先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new da...
js判斷資料型別的幾種方法
1.typeof 鑑於 ecmascript 是鬆散型別的,因此需要有種手段來檢測給定變數的資料型別,typeof 就是負責提供這方面資訊的操作符。對乙個值使用 typeof 操作符可能返回下列某個字串 缺點 對於陣列和物件或null 都會返回object undefined 如果這個值未定義 bo...
判斷資料型別幾種方法
常用的判斷資料型別的方法主要有 typeof,instanceof,constructor,object.prototype.tostring 下面來分別介紹 1 typeof 返回乙個字串,表示未經計算的運算元的型別。console.log typeof 42 number 缺點 對於陣列和物件或...