Javascript 使用特征检测通过点符号检查对保留字的支持

Javascript 使用特征检测通过点符号检查对保留字的支持,javascript,twitter,internet-explorer-8,browser-feature-detection,Javascript,Twitter,Internet Explorer 8,Browser Feature Detection,我在一个网站上工作,我们仍然需要支持IE8,我们正在尝试包括Twitter共享按钮小部件 在IE8中,我们看到了“预期标识符”错误。这似乎是一个常见的问题,下面的帖子对此进行了充分的解释: 基本上Twitter已经停止支持IE8了(我希望我也能这么做;)-但更重要的是,这个错误是因为Twitter widgets.js文件似乎通过点符号引用了一个名为delete的属性(这就是我上面引用的第一篇SO帖子所建议的) 基于上面的两篇SO文章,有两种解决方法-要么复制widgets.js,将属性

我在一个网站上工作,我们仍然需要支持IE8,我们正在尝试包括Twitter共享按钮小部件

在IE8中,我们看到了“预期标识符”错误。这似乎是一个常见的问题,下面的帖子对此进行了充分的解释:

基本上Twitter已经停止支持IE8了(我希望我也能这么做;)-但更重要的是,这个错误是因为Twitter widgets.js文件似乎通过点符号引用了一个名为
delete
的属性(这就是我上面引用的第一篇SO帖子所建议的)

基于上面的两篇SO文章,有两种解决方法-要么复制widgets.js,将属性名称从
delete
更改为其他名称;或者使用条件注释来防止它加载到IE8中

我不喜欢复制widgets.js文件(并且必须永远维护它!),所以我正在考虑防止它被加载到IE8中。但我不想使用条件注释;我想使用特征检测

因此,我尝试编写以下代码,以决定是否调用Twitter异步库加载代码:

NTJSLibrary.prototype.hostSupportsDeleteKeywordAsPropertyName = function hostSupportsDeleteKeywordAsPropertyName() {
    var testObj = {"delete":true};
    try {
        return testObj.delete;
    }
    catch (e) {
        // Host does not support referencing a property named 'delete' and has thrown an exception
        return false;
    }
};
不幸的是,它无法工作,因为IE8抛出了一个
SCRIPT1010
错误,这是一个编译/解释错误,而不是运行时错误。IE不会抛出异常,因为它没有运行


有人知道我如何编写一个功能检测函数来检测通过点符号引用保留字
delete
是否会导致编译/解释错误吗?

不能用try-catch语句测试它的原因是语法错误是JavaScript中的“早期错误”,这意味着即使不尝试执行代码,也会立即抛出错误。(见 如需更详细的解释。)

为了解决这个问题,我们必须使用某种方法来动态创建代码,这将避免这个问题。在JavaScript中,您可以使用
newfunction
eval
(在这种情况下,使用
eval
是可以接受的,因为我们没有执行用户定义的代码,也没有真正的方法来使用它)

测试的一个例子可以是这样的:

function testReservedWords() {
  try {
    new Function('a.delete');
    return true;
  } catch (e) {
    return false;
  }
}