在js開發中,經常需要檢測乙個變數的型別。現在就總結一下常見的檢測變數型別的方法,以及它們的適用場景。
一、typeof
要檢測乙個變數是不是基本資料型別,typeof是最佳的工具。也就是說,typeof是確定乙個變數是字串、數值、布林值還是undefined的最佳工具。但如果變數是乙個物件或者null,則typeof操作符會都返回object:
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();
console.log(
typeof num,
typeof str,
typeof bool,
typeof arr,
typeof json,
typeof func,
typeof und,
typeof nul,
typeof date,
typeof reg,
typeof error
);// number string boolean object object function
undefined object object object object
從上面的結果可以看出,在檢測基本資料型別的時候,typeof是非常得力的助手,但是在檢測引用型別的值時,這個操作符的用處不大。通常情況下,我們並不是想知道某個值是物件,而是想知道他是什麼型別的物件。為此,ecmascript提供了instanceof操作符,語法如下所示:
result = variable instanceof constructor
如果變數是給定引用型別的例項,那麼instanceof操作符會返回true。
console.log(
num instanceof
number,
str instanceof
string,
bool instanceof
boolean,
arr instanceof
array,
json instanceof
object,
func instanceof
function,
und instanceof
object,
nul instanceof
object,
date instanceof
date,
reg instanceof
regexp,
error instanceof
error
)// num : false
// str : false
// bool : false
// arr : true
// json : true
// func : true
// und : false
// nul : false
// date : true
// reg : true
// error : true
從上面的執行結果我們可以看到,num, str和bool沒有檢測出他的型別,但是我們使用下面的方式建立num,是可以檢測出型別的:
var num = new number(123);
var str = new string(『abcdef』);
var boolean = new boolean(true);
也就是說,根據規定,所有引用型別的值都是object的例項。因此,在檢測乙個引用型別和object建構函式時,instanceof操作符始終會返回true。如果使用instanceof操作符檢測基本資料型別的值,則該操作符始終返回false,因為基本資料型別不是物件。
js 型別檢測
1 檢測字串 數值 布林值 undefined function 使用typeof 在safari和chrome中檢測正則也會返回 function 2 檢測null 應用 3 檢測其它物件 方法一 利用instanceof constructor 再某些ie版本中存在跨iframe問題,每個ifr...
JS型別檢測
主要有兩種型別檢測 typeof 以及 instanceof 一 typeof 判斷型別 返回乙個字串 typeof 數字 number typeof 布林值 boolean typeof 字串 object typeof undefined undefined typeof null object...
JS 型別檢測
型別檢測分為五種 1.typeof 2.物件 obj instanceof object 函式物件 函式構造器 左邊的運算元的物件的原型鏈上是否有右操作函式構造器的prototype屬性 例子 1,2 instanceof array true new object instanceof array...