javascript - Javascript 函数怎么可能未定义但仍然可以调用?

标签 javascript cross-browser

当我写作时

window.external.AddSearchProvider

在 Internet Explorer 11 中,我得到“未定义”,但我仍然可以调用和使用该函数。在 Chrome 中,该方法已定义且可用。

如果我写

"AddSearchProvider" in window.external

我在 Internet Explorer 和 Chrome 中都得到“true”。

这是预期的行为吗?我的印象是我可以通过检查函数是否已定义来检查我是否可以使用该函数,还是我误解了它?

最佳答案

window.external.AddSearchProvider 不是“普通”javascript 函数。它是浏览器提供的 native 功能,每个浏览器的处理方式不同。

当您在浏览器 javascript 控制台中键入 window.external.AddSearchProvider 时,您会在浏览器的 javascript 中看到该值的表示形式。大多数浏览器都实现了其 native 功能的表示,但 Internet Explorer 似乎没有,因此您会看到 undefined,因为控制台没有可显示的值。但该函数是可调用的。

举个例子,你可以把它看成一个对象,有这样的方法

toJavascriptValue : function() {
    return undefined;
}

关于javascript - Javascript 函数怎么可能未定义但仍然可以调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951040/

相关文章:

javascript - 单击按钮会出现错误路径错误

javascript - 强制 heroku 使用特定版本的 Node.js

javascript - 页面无法使用 ng-include 滚动 ="function()"- 该代码不再使用

css - 为什么即使使用 HTML 重置,在 Chrome 和 Firefox 上呈现的文本大小也不同?

CSS - 文件上传/选择按钮 - 在 IE、Firefox、Opera 中不同

javascript - 将字符串转换为变量名。 (JavaScript)

javascript - 尝试创建重置过滤器按钮,但 JavaScript 不起作用

javascript - Internet Explorer 到 Firefox javascript 迁移库 - 是否存在?

html - 跨浏览器 HTML5 视频兼容性不适用于多种视频格式

css - IE8 忽略框大小