各瀏覽器對typeof運算子的實現差異

2021-09-01 11:19:20 字數 3544 閱讀 9360

1,ie6/7/8中typeof運算子對bom物件如window,document,location,history等物件的方法返回「object」,標準瀏覽器都返回「function」。

12

3

4

5

6

alert(typeofwindow.alert);// object

alert(typeofdocument.write);// object

alert(typeofdocument.getelementbyid);// object

alert(typeofdocument.getelementsbytagname);// object

alert(typeoflocation.reload);// object

alert(typeofhistory.go);// object

2,safari/chrome對正則物件返回function,其它瀏覽器返回object

12

3

varbb =newregexp('bb');

alert(typeof/aa/);// --> function

alert(typeofbb);// --> function

3,safari對nodelist返回function,其它瀏覽器返回object

12

3

4

varnodes1 = document.body.children

nodes2 = document.body.childnodes;

alert(typeofnodes1);

alert(typeofnodes2);

關於typeof運算子,ecmascript5 11.4.3節有相關說明(注意result都是字串)

從上表可以看出

1,基本型別

對於undefined、null、boolean、number、string返回字串"undefined"、"object"、"boolean"、"number"、"string"。 需注意的是對於null返回的不是"null"而是"object",據說是ecmascript早期版本的筆誤而一直延續至今。

2,物件型別

物件型別又分本地物件(object)和宿主物件(window),本地物件又分普通物件和函式型別物件。因為js中函式是一等公民,即函式本身也是個物件。因此需要區分下。這裡的物件指沒有實現call方法的物件。

普通物件如object,array等返回 「object」。

函式型別物件如new function方式或function fn(){}、var fn = function(){}方式返回「function」。

宿主物件如window,沒有實現call方法的物件返回是宿主自定義的,但不能是"undefined"、"boolean"、"number"、"string"。即宿主的實現不能是js的基本型別的返回值,這是語言最核心的地方,否則會讓人很困惑。

以上就是ecmascript對typeof描述的全部。

對於以上列舉的三個差異的第二條:safari/chrome對正則物件返回function,其它瀏覽器返回object,這可以認為是safari/chrome的bug,即沒有按標準ecmascript5實現。正規表示式是非宿主普通物件(見ecmascript5 15.10 regexp (regular expression) objects),而又沒有實現call方法。如

1

2

3

varreg = /aa/;

alert(reg.call);// undefined

alert(reg.test);// native code

因此對於typeof運算應該返回「object」而不是「function」。

對於第一條和第三條,宿主物件,除了不能返回"undefined"、"boolean"、"number"、"string"外,具體返回啥由瀏覽器自行實現。我們看乙個示例window.alert

1

alert(alert.call);// ie6/7/8中undefined,ie9/firefox/safari/chrome/opera中native code

可以看到ie6/7/8中alert是沒有call方法的,因此typeof window.alert,ie6/7/8中返回「object」也沒有違背規範,只是讓開發者覺得很困惑,因為從學js的第一天開始就認為alert是window物件的乙個方法/函式。

正因為ecmascript對於宿主物件沒有嚴格的定義typeof,從而在ie中使用typeof運算子返回"date"、"unknow"之類的就不足為奇了。

alert(typeofxhr.abort);// ie6/7/8/9中都返回 unknow

各瀏覽器的User Agent列表

1 使用者 是指瀏覽器,它的資訊包括硬體平台 系統軟體 應用軟體和使用者個人偏好。使用者 的能力和偏好可以認為是元資料或使用者 的硬體和軟體的特性和描述 2 sip終端系統稱為使用者 即ua useragent 含使用者 客戶機uac useragentclient 和使用者 伺服器uas user...

對 運算子的思考

c語言中支援 字首運算子和 字尾運算子,但是字首運算子的優先順序高於字尾的優先順序,c語言的運算子優先順序共有15等級,在同一等級的運算子中的運算順序是由結合性決定的。優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇...

各瀏覽器的滑鼠位置測試

e.pagex e.layerx e.offsetx e.clientx e.x屬性 測試 瀏覽器 ff9 chrome15 opera11.52 safari5 win ie6 7 8 9 測試 圖示 測試結果如下 chrome e.pagex 相對整個頁面的座標 e.layerx 相對當前座標系...