object instanceof constructor // object為要測試的例項物件 constructor為建構函式
注意:instanceof
無法判斷基本型別,只能判斷引用型別
let obj =
newobject()
console.
log(obj instanceof
object
)// true
class
person
const p =
newperson()
console.
log(p instanceof
person
)// true
// 判斷 f 是否是 f 類的例項
functionf(
)const f =
newf()
console.
log(f.__proto__ ===
f.prototype)
// true 因為f的prototype === f的__proro__ 符合 instanceof 檢測條件,所以下面為true
console.
log(f instanceoff)
// true
下面的**說明了date
也屬於object
型別,date
是由object
類派生出來的
const d =
newdate()
console.
log(d instanceof
date
)// true
console.
log(date instanceof
object
)// true
console.
log(d instanceof
object
)// true
題型1console.
log(function instanceof
function
) console.
log(function instanceof
object
)console.
log(object instanceof
function
)console.
log(object instanceof
object
)
思路如下:
console.
log(function.__proto__ === function.prototype)
console.
log(function.__proto__.__proto__ === object.prototype)
console.
log(object.__proto__ === function.prototype)
console.
log(object.__proto__.__proto__ === object.prototype)
題型2function
fun(
)const f =
newfun()
console.
log(f instanceof
fun)
// true
function
fun2()
}const f2 =
newfun2()
console.
log(f2 instanceof
fun2
)// false
因為instanceof
操作符是判斷原型鏈上的物件,而當乙個物件並不是通過原型構造出來的時候(直接return乙個物件),此方法就失效了.
function
instanceof
(obj, constructor)if(
typeof obj !==
'object'
&&typeof obj !==
'function'
)let proto = obj.__proto__
while
(proto)
proto = proto.__proto__
}return
false
}
typeof 操作符返回乙個字串,表示未經計算的運算元的型別
typeof operand
typeof(operand) // operand 是乙個表示物件或原始值的表示式,其型別將被返回
在很早之前,使用的32位系統,為了效能考慮使用低位儲存了變數的型別資訊.
此外還有2個比較特殊的指:undefined
和null
這樣一來,null
就出了乙個bug.因為它對應的空指標,低位是000,因此被判斷成乙個物件了.且這個bug,應該是永遠都不會去修復了.
console.
log(
typeof undefined)
// undefined
console.
log(
typeof
null
)// object
console.
log(
typeof
123n)
// bigint
console.
log(
typeof
symbol
('str'))
// symbol
console.
log(
typeof((
)=>))
// function
console.
log(
typeof
)// object
在es2015之前,typeof
總能保證對任何所給的運算元返回乙個字串,即使是未宣告的識別符號,也能返回undefined
. 但是在有了let
和const
塊級作用域後,在其被宣告之前對塊中的let
和const
變數使用typeof
將會丟擲乙個referenceerror
.
console.
log(
typeof obj2)
// uncaught referenceerror: cannot access 'obj2' before initialization
const obj2 =
當前所有的瀏覽器都暴露了乙個型別為undefined
的非標準宿主物件document.all
console.
log(
typeof document.all)
// undefined
我們通過tostring
來獲取型別,算是乙個比較完美的方案.
function
gettype
(obj)
// 或者下面的寫法
function
gettype
(obj)
}
通常,我們使用typeof
來判斷基本型別 ,instanceof
判斷引用型別. js typeof和instanceof的區別
typeof是乙個一元運算,放在乙個運算數前面,運算數可以是任意型別的數 返回值一般有這幾個 number,boolean,string,function,object,undefined 實際應用中通常用來獲取乙個變數是否存在,if typeof a undefined 不要用if a 這樣的方式...
instanceof 和型別轉換
instanceof是j a的乙個保留關鍵字,先有繼承關係,再有instanceof的使用左邊是物件,右邊是類,返回型別是boolean型別。它的具體作用是測試左邊的物件是否是右邊類或者該類的子類建立的例項物件,是,則返回true,否則返回false。system.out.println a 物件 ...
js之 typeof和instanceof的區別
typeof和instanceof的區別 typeof可以獲取任意變數的型別 任意型別的物件用typeof獲得到的都是object 但是instanceof只能判斷物件的型別。示例一 這樣就可以在控制台上獲得 object 所以驗證了我們上邊所說的 任意型別的物件用typeof獲得到的都是objec...