typeof 是一個(gè)一元運(yùn)算鸦难,放在一個(gè)運(yùn)算數(shù)之前根吁,運(yùn)算數(shù)可以是任意類型。
它返回值是一個(gè)字符串合蔽,該字符串說明運(yùn)算數(shù)的類型击敌。(typeof 運(yùn)算符返回一個(gè)用來表示表達(dá)式的數(shù)據(jù)類型的字符串。 )
typeof其實(shí)就是判斷參數(shù)是什么類型的實(shí)例拴事,就一個(gè)參數(shù)
typeof 一般只能返回如下幾個(gè)結(jié)果:"number"沃斤、"string"圣蝎、"boolean"、"object"衡瓶、"function" 和 "undefined"徘公。
我們可以使用 typeof 來獲取一個(gè)變量是否存在,如 if(typeof
a!="undefined"){alert("ok")}哮针,而不要去使用 if(a) 因?yàn)槿绻?a 不存在(未聲明)則會(huì)出錯(cuò)关面,對(duì)于
Array,Null 等特殊對(duì)象使用 typeof 一律返回 object,這正是 typeof 的局限性十厢。
經(jīng)常會(huì)在js里用到數(shù)組,比如 多個(gè)名字相同的input, 若是動(dòng)態(tài)生成的, 提交時(shí)就需要判斷其是否是數(shù)組.
if(document.mylist.length != "undefined" ) {} //這個(gè)用法有誤.
正確的是 if( typeof(document.mylist.length) != "undefined" ) {}
或 if( !isNaN(document.mylist.length) ) {}
typeof的運(yùn)算數(shù)未定義,返回的就是 "undefined".
在 JavaScript 中等太,判斷一個(gè)變量的類型嘗嘗會(huì)用 typeof 運(yùn)算符,在使用 typeof 運(yùn)算符時(shí)采用引用類型存儲(chǔ)值會(huì)出現(xiàn)一個(gè)問題蛮放,無論引用的是什么類型的對(duì)象缩抡,它都返回 “object”。這就需要用到instanceof來檢測(cè)某個(gè)對(duì)象是不是另一個(gè)對(duì)象的實(shí)例筛武。
instanceof
instanceof運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的prototype屬性缝其。
語法:object instanceof constructor
參數(shù):object(要檢測(cè)的對(duì)象.)constructor(某個(gè)構(gòu)造函數(shù))
描述:instanceof?運(yùn)算符用來檢測(cè)constructor.prototype?是否存在于參數(shù)object?的原型鏈上。
談到 instanceof 我們要多插入一個(gè)問題徘六,就是 function 的 arguments内边,我們大家也許都認(rèn)為 arguments 是一個(gè) Array,但如果使用 instaceof 去測(cè)試會(huì)發(fā)現(xiàn)
arguments?不是一個(gè) Array 對(duì)象待锈,盡管看起來很像漠其。
另外:
測(cè)試 var a=new Array();if (a instanceof Object) alert('Y');else alert('N');
得'Y’
但 if (window instanceof Object) alert('Y');else alert('N');
得'N'
所以,這里的 instanceof 測(cè)試的 object 是指 js 語法中的 object竿音,不是指 dom 模型對(duì)象和屎。
使用 typeof 會(huì)有些區(qū)別
alert(typeof(window)) 會(huì)得 object
需要注意的是,如果表達(dá)式obj instanceof Foo返回true春瞬,則并不意味著該表達(dá)式會(huì)永遠(yuǎn)返回ture柴信,因?yàn)镕oo.prototype屬性的值有可能會(huì)改變,改變之后的值很有可能不存在于obj的原型鏈上宽气,這時(shí)原表達(dá)式的值就會(huì)成為false随常。另外一種情況下,原表達(dá)式的值也會(huì)改變萄涯,就是改變對(duì)象obj的原型鏈的情況绪氛,雖然在目前的ES規(guī)范中,我們只能讀取對(duì)象的原型而不能改變它涝影,但借助于非標(biāo)準(zhǔn)的__proto__魔法屬性枣察,是可以實(shí)現(xiàn)的。比如執(zhí)行obj.__proto__ = {}之后,obj instanceof Foo就會(huì)返回false了序目。