提问人:spunka 提问时间:11/12/2021 最后编辑:Bergispunka 更新时间:11/12/2021 访问量:232
检测旧的 Internet Explorer Javascript 函数(< ES6)
Detect old Internet explorer Javascript functions ( < ES6)
问:
有一个在线网络、库或其他东西可以检测与 Chrome/Firefox 或仅 ES6 不兼容的旧 IE 功能?
比如:document.all、event.returnValue 等
JsHint/Jslint 未将它们检测为已弃用或不兼容
答:
说 JSLint 不会告诉你弃用的属性是不公平的。让我解释一下。
首先回想一下,JavaScript 是一种动态语言。您可以将任何属性分配给 [几乎] 任何对象。如果您愿意,可以在浏览器上下文中分配 。您可以使用以下命令添加到字符串中...all
window
window.all = "Muahahaha!!! I'm evil!!!"
.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 逐个文件进行 lint 检查),它根本无法知道对象的属性发生了什么,也无法识别哪些是有效的,哪些是无效的。
(顺便说一句,这就是 TypeScript 的用途。
除非你告诉 JSLint 怎么做!!-- JSLint 指令 ftwproperty
或者,如果您愿意做一些工作,则可以使用 JSLint 属性
指令,该指令完全可以执行您想要的操作。
如果将 property 指令放在文件的顶部,则 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的[原文如此]路由.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
*/
按字母顺序排列,甚至。
现在只需删除您不想要的那些并 presto!您将获得所需的一切。
这是否有点乏味,是否需要对正确使用的文件进行一些按摩/培训?是的,但是,同样,在动态语言中,这接近于您希望使用逐个文件linter所能达到的最好结果。document
注意:如果这不能解决您的问题,无论多么不完美,那么我们需要查看更多您的文件,并更准确地了解您在实践中试图解决的问题。
评论
上一个:JSLint 字符意外 '.'
评论
document.all
.innerHTML