检测旧的Internet Explorer Javascript函数(<ES6)



是否有网络在线、库或其他东西可以检测与Chrome/FFirefox或ES6不兼容的旧IE功能?

如:document.all、event.returnValue等

JsHint/Jslint没有检测到它们是不推荐使用的或不兼容的

说JSLint不会告诉您不推荐使用的属性是不公平的。让我解释一下。

首先回想一下,JavaScript是一种动态语言。您可以将任何属性分配给[几乎]任何对象。如果您愿意,只需说出window.all = "Muahahaha!!! I'm evil!!!",就可以在浏览器上下文中将all分配给window。您可以使用…将.all添加到字符串中。。。

var spam = "a string";
spam.all = "I'm still evil!!!"

或者,更糟糕的是,某些代码可能在文件之外的某个地方更改了String(或任何其他对象类型(的原型。在浏览器控制台中试试这个:

String.prototype.all = String.prototype.all || "This is beyond evil.";
// 'This is beyond evil.'
var spam = "spam"
// undefined
spam.all
// 'This is beyond evil.'

因此,默认情况下,JSLint不会按名称检查对象的属性。特别是对于那些可能存在于文件上下文之外的对象(因为JSLint逐文件lints(,它根本无法知道对象的属性发生了什么,也无法识别哪些是有效的,哪些是无效的。

(顺便说一句,这就是TypeScript的作用。(

除非你告诉JSLint怎么做--JSLintproperty指令ftw

或者,如果您愿意做一些工作,也可以使用JSLintproperty指令,该指令可以执行所需的

如果您将属性指令放在文件的顶部,JSLint将显示页面上不在该列表中的对象所使用的任何属性的错误。

例如,在JSLint.com的官方页面上试试这个:

/*property
log
*/
/*jslint browser, devel */
function mySpam() {
var spam = document.all;
console.log(spam);
}

看看我是如何使用document.all的,但all不在property指令中吗?我会出错的。

1. Unregistered property name 'all'.
var spam = document.all;

你可能会说;但是,我将永远从我的3000行文件中获得所有好的属性,我正在执行该指令">

不是这样!这里有一个提示:将你的文件粘贴到JSLint.com中,即使是未链接的文件。它会在报告中为你创建一个property指令。

这是我在几秒钟内用AngularJS的[原文如此]route.js制作的一个:

/*property
$$minErr, $evalAsync, $get, angularVersion, caseInsensitiveMatch, create,
defaultPrevented, eagerInstantiationEnabled, extend, info, isArray,
isDefined, isObject, isUndefined, length, module, noop, originalPath,
otherwise, preventDefault, provider, redirectTo, reload, reloadOnSearch,
reloadOnUrl, routes, run, substr, when
*/

按字母顺序排列。

现在只需删除那些你不想要的并预览!你会得到你需要的一切。

这是否有点乏味,是否需要对正确使用document的文件进行一些按摩/培训?是的,但是,同样,在动态语言中,这接近于逐文件linters所能达到的最佳效果。

注意:如果这不能解决您的问题,无论多么不完美,我们都需要查看更多您的文件,并更准确地了解您在实践中试图解决的问题。

相关内容

  • 没有找到相关文章

最新更新