1,ie6/7/8中typeof運算子對bom物件如window,document,location,history等物件的方法返回「object」,標準瀏覽器都返回「function」。
12
3
4
5
6
alert(
typeof
window.alert);
// object
alert(
typeof
document.write);
// object
alert(
typeof
document.getelementbyid);
// object
alert(
typeof
document.getelementsbytagname);
// object
alert(
typeof
location.reload);
// object
alert(
typeof
history.go);
// object
2,safari/chrome對正則物件返回function,其它瀏覽器返回object
12
3
var
bb =
new
regexp(
'bb'
);
alert(
typeof
/aa/);
// --> function
alert(
typeof
bb);
// --> function
3,safari對nodelist返回function,其它瀏覽器返回object
12
3
4
var
nodes1 = document.body.children
nodes2 = document.body.childnodes;
alert(
typeof
nodes1);
alert(
typeof
nodes2);
關於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
var
reg = /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(
typeof
xhr.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 相對當前座標系...