ESLint 报错解决:'document' is not defined

阅读时长 4 分钟读完

引言

在开发过程中,我们可能会遇到 ESLint 报错 'document' is not defined 的情况。这个错误一般出现在使用了浏览器相关 API 的地方,比如在 windowdocument 对象上调用方法时。

本文将详细讲解这个错误的原因,以及如何解决这个问题。

错误原因

在浏览器中使用 windowdocument 对象时,我们并不需要将它们定义为变量。但是,ESLint 在默认情况下并不知道这些全局变量的存在,因此会警告 documentwindow 未定义。

解决方案

有两种方法可以解决这个问题。

方法一:通过配置 .eslintrc 文件

一种解决方法是在 .eslintrc 文件中配置全局变量:

在这个例子中,我们将 documentwindow 定义为全局变量,值为 false。这告诉 ESLint,我们不允许重写这些变量,而且它们已经定义过了。

方法二:使用 eslint-plugin-browser 插件

另一种解决方法是使用 eslint-plugin-browser 插件,该插件已经预定义了许多浏览器全局变量,并可以自动忽略这些变量的警告。

我们可以通过以下命令安装 eslint-plugin-browser

安装完成后,在 .eslintrc 文件中添加以下配置:

接着,我们就可以使用浏览器相关 API 了,而不会再看到 documentwindow 未定义的警告了。

示例代码

下面是一些例子,展示如何在脚本中使用 documentwindow 对象。

示例一:

-- -------------------- ---- -------
-- --- ----
--------------------------------------------------------------- -------- -- -
  -----------------------
---

-- ---- ----
------------------------------- -------- -- -
  --------------------------------------------------------------- -------- -- -
    -----------------------
  ---
---

在上面的示例中,我们监听了 .my-element 元素的点击事件,并将 'clicked' 打印到控制台中。由于我们尝试在页面加载之前访问 document,所以这个代码将触发警告信息 'document' is not defined

解决方法是在 load 事件之后才访问 document

示例二:

-- -------------------- ---- -------
-- --- ----
-- --------------------------------------- --- ------- -
  --------------- ---- -- ----------
-

-- ---- ----
-- -------------------------------- --- ------- -
  --------------- ---- -- ----------
-

在上面的示例中,我们从 window.localStorage 中获取了某个数据,但是由于我们访问了 window,这个代码将触发警告信息 'window' is not defined

解决方法是直接使用 localStorage,不需要通过 window 对象来访问。

总结

在使用浏览器相关 API 时,我们需要告诉 ESLint 这些全局变量的存在。我们可以通过修改 .eslintrc 文件或安装 eslint-plugin-browser 插件来解决这个问题。

当然,我们不应该直接在页面加载之前访问 documentwindow 对象。我们应该等到页面加载完成之后再使用这些对象。这也是一个优秀的编程实践。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648ea5e748841e9894d07f5b

纠错
反馈