`
zhouyrt
  • 浏览: 1162002 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

各浏览器对typeof运算符的实现差异

    博客分类:
  • BUG
 
阅读更多

1,IE6/7/8中typeof运算符对BOM对象如window,document,location,history等对象的方法错误的返回“object”,标准浏览器都返回“function”。

 

alert(typeof window.alert);
alert(typeof document.write);
alert(typeof document.getElementById);
alert(typeof document.getElementsByTagName);
alert(typeof location.reload);
alert(typeof history.go);

 

 

2,Safari/Chrome对正则对象错误的返回function,其它浏览器返回object

var bb = new RegExp('bb');
alert(typeof /aa/);// --> function
alert(typeof bb);// --> function
 

 

3,Safari对NodeList返回function,其它浏览器返回object

var nodes1 = document.body.children
    nodes2 = document.body.childNodes;
alert(typeof nodes1);
alert(typeof nodes2);

 

 

 

 

分享到:
评论
9 楼 wmingjian 2011-02-06  
漏掉两个字,修正如下:
一句话,JS中对象分内部和外部两种,我从来不像讨论JS内部对象的类型一样,来严格的讨论JS外部宿主对象的类型系统的。对JS这种弱类型语言来说,外部对象可以通过引擎实现语言的类型系统来混淆JS中的任何类型。
8 楼 wmingjian 2011-02-06  
一句话,JS中对象分内部和外部两种,我从来不像讨论JS内部对象的类型一样,来严格的讨论JS外部宿主对象的类型系统的。对JS这种弱类型语言来说,外部对象可以通过实现语言的类型系统来混淆JS中的任何类型。
7 楼 zhaodidong 2011-01-17  
fengchong719 写道
ie6-8 把 function 分析为 object 类型.
var fun = new function(){}
window.onload = function(){
alert(typeof fun);
alert(typeof window.alert)
alert(typeof window);
}
以上弹出的值都为object,也就是说,ie6-8还没有把function当做一个类型来应用,只是我们可以这样用。



new出来的肯定是对象 哈哈


alert 是ie 错了

window 就是对象啊 new Window()
6 楼 kyfxbl 2011-01-17  
日,ie sucks
5 楼 fengchong719 2010-07-29  
ie6-8 把 function 分析为 object 类型.
var fun = new function(){}
window.onload = function(){
alert(typeof fun);
alert(typeof window.alert)
alert(typeof window);
}
以上弹出的值都为object,也就是说,ie6-8还没有把function当做一个类型来应用,只是我们可以这样用。
4 楼 aws 2010-07-28  
说来说起,还是当年微软自恃垄断老大,没有尽力的去推IE成为标准
否则也不会有现在几个什么标准,可笑
3 楼 西门吹牛 2010-07-28  
ie的东西就是得够个性
2 楼 robyjeffding 2010-07-27  
试了一下FireFox,全部都返回Function,至于IE6返回的Object就看不懂了
1 楼 congdepeng 2010-07-23  
也许IE6/7/8觉得 function也是 object,所以马马虎虎了

相关推荐

    JavaScript中使用typeof运算符需要注意的几个坑

    在Safari 5及更早版本,以及Chrome 7之前,`typeof`对正则表达式对象的判断结果是`'function'`,这与现代浏览器中的行为不一致。现代浏览器中,正则表达式会被识别为`'object'`。这一差异可能导致在不同浏览器间的...

    javascript跨浏览器的属性判断方法

    由于不同浏览器间对同一属性的命名可能存在差异,或是在同一浏览器的不同版本中对属性的实现有所不同,因此需要一种策略来平滑地处理这种不一致性。本文探讨了在JavaScript中实现跨浏览器属性判断的方法。 首先,一...

    javascript实现控制浏览器全屏

    需要注意的是,此方法在不同浏览器中的实现略有不同,因此在实际应用时,代码中通常会使用或运算符 `||` 检测浏览器支持的前缀,并执行相应的全屏方法。 例如,`document.documentElement.requestFullScreen()` ...

    JS中typeof与instanceof之间的区别总结

    `typeof`是一个一元运算符,其主要功能是确定变量的数据类型。它会返回一个字符串,表明变量或表达式的类型。`typeof`支持以下几种类型: 1. `number`:当变量为数值时。 2. `boolean`:变量为布尔值时。 3. `...

    day09_JavaScript基础1

    7. **BOM(浏览器对象模型)和DOM(文档对象模型)**:JavaScript可以通过BOM操作浏览器对象,如窗口、导航、历史记录等,通过DOM操作HTML元素,实现对网页内容的动态修改。 8. **JavaScript与HTML结合**:...

    JavaScript语言概述笔记和常用工具

    在互联网初期的“浏览器大战”中,由于各浏览器厂商的实现差异,导致出现了多种JavaScript版本,比如微软的Jscript。这就使得JavaScript在不同浏览器间存在兼容性问题,开发者需要额外的工作来确保代码在所有浏览器...

    JavaScript语法

    此外,还有其他特殊运算符,比如delete用于删除对象的属性,instanceof用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,new用于创建一个实例对象,typeof用于获取变量或表达式的类型,void用于...

    2023年韩顺平javascript课堂实录笔记千万别错过好东西.doc

    需要注意的是,由于不同浏览器的实现差异,可能导致JS代码在某些浏览器上运行不正常。解决这个问题的一个方法是使用跨浏览器的函数和库,或者进行充分的浏览器兼容性测试。 学习JS,可以参考在线手册,如w3school的...

    取得窗口大小 兼容所有浏览器的js代码

    总结来说,为了确保在所有浏览器中都能够准确地获取窗口的大小和位置,我们必须考虑浏览器间的差异,并且编写能够兼容这些差异的代码。通过首先尝试访问现代浏览器标准的属性,然后根据浏览器是否支持这些属性来选择...

    韩顺平十天javascript全套笔记(整理版)

    - **浏览器差异**:由于不同浏览器之间存在差异,相同的JavaScript脚本可能在某些浏览器中无法正常工作。 - **解决方案**:为了确保代码兼容性,开发者需要在多种主流浏览器中进行测试。 - **推荐做法**:尽量使用跨...

    JavaScript

    `typeof`运算符可以返回表达式的数据类型。 在控制流程方面,JavaScript的条件判断(if语句)需要注意赋值与比较操作的混淆,switch语句可以处理字符串,循环结构(while、do…while、for)则与Java类似,但在弱...

    前端开发面试.pdf

    - **数据类型**:理解基本类型(primitive types)与引用类型(reference types)的区别,以及typeof运算符的使用。 - **面向对象**:熟悉构造函数、原型链、类(class)等面向对象编程概念。 - **闭包**:掌握闭包的...

    2023年JavaScript学习笔记.pdf

    - **typeof运算符**:用于获取变量的数据类型。 - **delete运算符**:用于删除对象的属性。 - **instanceof运算符**:用于检测构造函数的原型对象是否出现在某个实例的原型链上。 #### 4. with 语句 with语句提供...

    如何判断出一个js对象是否一个dom对象

    但是,需要注意的是,不同浏览器对HTMLElement的类型可能有不同的实现,如在Chrome和Opera中HTMLElement的类型可能被实现为函数,这样就无法使用instanceof运算符来判断了。 3. **综合属性和类型检查**:基于上述...

    JavaScript 24道面试题和答案.docx

    2. 基本数据类型和引用数据类型的差异: - 参数传递:基本数据类型传递的是值的副本,修改副本不会影响原值;引用数据类型传递的是对象引用,修改会影响原对象。 - 存储位置:基本数据类型存储在栈中,引用数据...

    JScript&VBscript

    JScript 是 Microsoft 对 ECMA-262 规范(JavaScript 的标准化)的实现,它在 Internet Explorer 浏览器中作为默认的脚本引擎使用。 JScript 的关键特性包括: 1. **类型系统**:JScript 支持弱类型系统,这意味着...

    JavaScript 24道面试题及答案.docx

    3. **基本数据类型与引用数据类型的差异**: - 基本数据类型在函数参数传递时传递的是值的副本,改变副本不会影响原始值。 - 引用数据类型传递的是值的引用,因此函数内部的修改会影响到原始值。 - 存储位置上,...

    JavaScript Perfection kill 测试及答案

    JavaScript Perfection Kill 测试是一个挑战开发者JavaScript技能的在线测验,涵盖了语言的多个方面,包括作用域、类型转换、函数、对象以及浏览器差异等。在这个测试中,出现了一些有趣的问题,其中部分问题在不同...

Global site tag (gtag.js) - Google Analytics