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...