typeof
typeof()一般用於判斷基本型別null除外,typeof也可以判斷function , 但判斷array, error, null 這幾個引用型別時對會被typeof判斷為object,所以如果想判斷這幾種資料型別,就不能使用 typeof 了,比較有侷限性
instanceof
instanceof檢測某乙個例項是否屬於乙個類
例如:class fn
}let obj = new fn(『nihao』)
console.log(obj instanceof fn) true
判斷obj是否是fn的例項,是則返回true,否則返回 false
,instanceof檢測的是原型,內部機制是通過判斷物件的原型鏈中是否有型別的原型
注意: instanceof 後面一定要是物件型別,並且大小寫不能寫錯
instanceof有個弊端就是,對於number,string, boolean這三種型別只能通過建構函式定義
let num = new number(123);
console.log(num instanceof number);
如果使用
var num = 12
console.log(num instanceof number)則為false,還需要注意,null和undefined都返回false ,這是因為他們的型別就是自己本身,不是object建立出來的他們,所以返回了false
constructor建構函式
例如 :
function fn()
var obj = new fn();
console.log(obj.__proto__);
console.log(fn.prototype)
console.log(obj.constructor == fn)
var num = 123
console.log(num.constructor==number)
console.log(false.constructor == boolean)
console.log(.constructor==array)
除了 undefined和null外,其他型別都可以通過constructor屬性來判斷
constructor是prototype物件上的屬性,指向建構函式。例項化物件的__proto__ 等於建構函式的prototype,根據例項物件尋找屬性的順序,若例項 物件上沒有例項屬性或方法時,就去原型鏈上尋找,因此,例項物件也是能使用constructor屬性的
當乙個函式fn被定義時,js引擎會為fn新增prototype屬性,然後在prototype屬性上新增乙個constructor屬性,並讓其執行fn的引用,fn利用原型物件的constructor屬性引用了自身,但是當fn作為建構函式建立物件時,原型上的constructor屬性被遺傳到了新建立的物件上,從原型鏈的角度講,建構函式fn就是新物件的型別,這樣做的意義是,讓物件誕生以後,就具有可追溯的資料型別object.prototype.tostring()
tostring()是 object 的原型方法,呼叫該方法,預設返回當前物件的class,這是乙個內部屬性,其格式返回
let obj = {};
console.log(object.prototype.tostring(obj))
//[object object]
var num = 1;
console.log(object.prototype.tostring.call(num))
//[object number]
console.log(object.prototype.tostring.call(undefined))
//[object undefined]
console.log(object.prototype.tostring.call(document))
//[object htmldocument]
封裝乙個獲取變數準確型別的函式
var obj = new date()
function gettype(obj)
// 如果不是 object型別的資料,直接用typeof判斷出來『
//如果是object型別的資料,準確判斷型別必須使用object.prototype.tostring().call(obj)的方式才能判斷
return object.prototype.tostring.call(obj).replace(/^\[object (\s+)\]$/, '$1')
}console.log(gettype(obj))
判斷資料型別的四種方法(Marksheng)
typeof typeof 一般用於判斷基本型別null除外,typeof也可以判斷function 但判斷array,error,null 這幾個引用型別時對會被typeof判斷為object,所以如果想判斷這幾種資料型別,就不能使用 typeof 了,比較有侷限性 instanceof inst...
js的資料型別以及判斷型別的四種方法
四種判斷型別的方法 null 表示定義為空 undefined 表示未定義 string 字串 number 特殊的兩個符號 nan和infinity isnan 判斷乙個數是否為無窮大,nan和任何數都不相等,包括它本身。parseint p1,p2 p1為字串,如果不是則轉換為字串後再進行處理。...
判斷js資料型別的四種方法和原理
怎麼去判斷乙個資料屬於哪個資料型別,這個是很常見的操作,我們一般都會想到typeof和instanceof這兩個常見的方法,但有時候這兩種方法並不能滿足我們的需求。那讓我們來看一下都有哪些可以判斷資料型別的方法吧。1.typeof 這個方法很常見,一般用來判斷基本資料型別,如 string,numb...