是否有网络在线、库或其他东西可以检测与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所能达到的最佳效果。
注意:如果这不能解决您的问题,无论多么不完美,我们都需要查看更多您的文件,并更准确地了解您在实践中试图解决的问题。