首頁  >  文章  >  web前端  >  JavaScript類型判斷的方法介紹(程式碼範例)

JavaScript類型判斷的方法介紹(程式碼範例)

不言
不言轉載
2019-03-18 11:02:002199瀏覽

這篇文章帶給大家的內容是關於JavaScript類型判斷的方法介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

JS資料型態判斷

有的時候需要判斷資料型,要應付各種複雜的邏輯判斷,先來個咱們最常用的。

1.typeof

typeof運算子傳回一個字串,並表示該變數的型別。

typeof oper / typeof (operand)

var testString = 'adus',
    testArray = [],
    testBoolean = true,
    testNumber = 0,
    testObject = {},
    testNull = null,
    testUndefined = undefined
    
console.log(typeof testString);//string
console.log(typeof testArray);//object
console.log(typeof testBoolean);//boolean
console.log(typeof testNumber);//number
console.log(typeof testObjec);//object
console.log(typeof testNull);//object
console.log(typeof testUndefined);//undefined

當然不只有上面的這些基礎類型,還有下面這些:

Symbol (ECMAScript 6 新增)    "symbol"

宿主物件(由JS環境提供)    Implementation-dependent

函數物件([[Call]] 在ECMA-262條款中實現了)    "function"

咦?有點不對,為什麼陣列、null等都是object? ? ?請往下看

Function或Array這些型別的實例的時候,其實都是基於Object實例進行的一種擴充。只是多了一些特有屬性。

在 JavaScript 最初的實作中,JavaScript 中的值是由一個表示類型的標籤和實際資料值表示的。物件的類型標籤是 0。

由於 null 代表的是 空指標(大多數平台下值為 0x00)。

因此,null的型別標籤也變成了 0,typeof null就錯誤的回傳了"object"。 (reference)

2.instanceof

instanceof運算子用於測試建構子的prototype屬性是否出現在物件的原型鏈中的任何位置,通俗點說就是一個變數是否某個物件的實例。

object instanceof constructor

object 要偵測的物件/ constructor 建構子

function fnc(){}
var newFnc = new fnc();
console.log(newFnc.__proto__ == fnc.prototype);//true
console.log( newFnc instanceof fnc ) //true


/*String对象和Date对象都属于Object类型和一些特殊情况*/

var simpleStr = "This is a simple string"; 
var myString  = new String();
var newStr    = new String("String created with constructor");
var myDate    = new Date();
var myObj     = {};
var myNonObj  = Object.create(null);

simpleStr instanceof String; // 返回 false, 检查原型链会找到 undefined
myString  instanceof String; // 返回 true
newStr    instanceof String; // 返回 true
myString  instanceof Object; // 返回 true

myObj instanceof Object;    // 返回 true, 尽管原型没有定义
({})  instanceof Object;    // 返回 true, 同上
myNonObj instanceof Object; // 返回 false, 一种创建对象的方法,这种方法创建的对象不是Object的一个实例

myString instanceof Date; //返回 false

myDate instanceof Date;     // 返回 true
myDate instanceof Object;   // 返回 true
myDate instanceof String;   // 返回 false

3.Object.prototype.toString()

每個物件都有一個toString()方法,當該物件被表示為一個文字值時,或者一個物件以預期的字串方式引用時自動呼叫。預設情況下,toString()方法被每個Object物件繼承。如果此方法在自訂物件中未被覆寫,toString() 傳回 "[object type]",其中type是物件的類型。

Function.prototype.call( thisArg ) / Function.prototype.apply( thisArg )

傳遞要檢查的物件作為第一個參數,稱為thisArg。

var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]

在適當的場景用恰當的方法,會很省心,也能保證程式碼的簡潔、健壯。


以上是JavaScript類型判斷的方法介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除