js 10 JS資料型別檢測

2021-09-30 01:21:23 字數 3632 閱讀 2892

typeof [val] : 用來檢測資料型別的運算子

console.log(typeof 1)           // => number (返回的是個字串,包含對應的資料型別)

console.log(typeof null) // => object (typeof的侷限性,null不是物件)

console.log(typeof ) // => object

總結: typeof具有侷限性

console.log(typeof typeof typeof )    

// => 1.typeof => "object"

// => 2.typeof "objectof" => "string"

// => 3.typeof "string" => "string"

總結: typeof檢測的結果都是字串,所以只要兩個及以上同時檢測,最後結果必然是「string」

typeof的侷限性 : 基於typeof無法細分出當前值是普通物件還是陣列物件等,因為只要是物件資料型別,返回的結果都是」object「

instanceof : 用來檢測當前例項是否屬於某個類,另外,還可以在繼承關係中用來判斷乙個例項是否屬於他的父類

var a = new array();

console.log(a instanceof array) // => true

console.log(a instanceof object) // => true

1.a屬於array類,所以返回true

2.同時,array是object的子類,因為繼承關係得出,a屬於object

function test();

var a = new test();

console.log(a instanceof test) // => true

function foo(){};

foo.prototype = new aoo();

var foo = new foo(){};

console.log(foo instanceof foo) // => true

console.log(foo instanceof aoo) // => true

拓展:prototype是每個物件都有的屬性,可以返回物件型別原型,每乙個建構函式都有乙個屬性叫做原型。所以不需要宣告,可以直接引用。例:

function test(){};

console.log(test.prototype) => object

對於null和undefined,實際上hull所屬類就是null,undefined所屬類就是undefined,而console時會報錯

constructor : 基於建構函式檢測資料型別(也是基於類的方法)

console.log(("1").constructor === string);               // => true

console.log((1).constructor === number); // => true

console.log((true).constructor === boolean); // => true

console.log(().constructor === array); // => true

console.log((function() {}).constructor === function); // => true

console.log(({}).constructor === object); // => true

乍一看似乎都能檢測出來,但也有特殊情況

function fn();

fn.prototypr = new array();

var f = new fn();

console.log(f.constructor === fn) // => false

console.log(f.constructor === array) // => true

宣告乙個建構函式,並將原型指向array原型。所以引入第四種方法

object.prototype.tostring.call() : 檢測資料型別的最好方法

jquery就是依靠這種方法檢測資料型別

var a = object.prototype.tostring;

console.log(a.call("aaa")); // => [object string]

console.log(a.call(1)); // => [object number]

console.log(a.call(true)); // => [object boolean]

console.log(a.call(null)); // => [object null]

console.log(a.call(undefined)); // => [object undefined]

console.log(a.call()); // => [object array]

console.log(a.call(function() {})); // => [object function]

console.log(a.call({})); // => [object object]

所有資料型別都可以檢測出來

function fn(){};

fn.prototype = new array();

object.prototype.tostring.call(fn); // => [object function]

改動原型也可以檢測出來

instanceof方法:

console.log("1" instanceof string)              // => false

console.log(new string("1") instanceof string) // => true

constructor

object.prototype.tosting.call()

js檢測資料型別

要檢測乙個變數是不是基本資料型別?typeof 操作符是最佳的工具。說得更具體一 點,typeof 操作符是確定乙個變數是字串 數值 布林值,還是undefined 的最佳工具。如果變 量的值是乙個物件或null,則typeof 操作符會像下面例子中所示的那樣返回 object var s nich...

JS資料型別檢測

在js的日常使用中,經常需要檢測資料的型別,現在,就來看一下,js有哪些方法可以檢測資料的型別。typeof操作符返回乙個字串,表示未經計算的運算元的型別。typeof是js原生提供用來檢測型別的api,然而,並沒有什麼用。為什麼呢?因為,typeof不能準確地檢測出我們所想要知道的資料的型別。ty...

JS 資料型別檢測

tpeof val 用來檢測資料型別的運算子。基於typeof檢測出來的結果 首先是乙個字串 字串中是對應的型別 侷限性 typeof null object 但是null並不是物件 基於typeof 無法細分出當前值是普通物件還是陣列物件等,只要是物件型別,返回結果都是 object typeof...