【问题标题】:Javascript: 'window' is not definedJavascript:未定义“窗口”
【发布时间】:2013-01-04 20:32:26
【问题描述】:

我正在尝试学习 JavaScript,但是下面的代码给我带来了很多麻烦:

window.onload = function () {
    for ( var i = 0; i < seats.length; i++) {
        for ( var j = 0; j < seats.length; j++) {
            document.getElementById(getSeatId(i, j)).onclick = function(evt) {
                getSeatStatus(getSeatId(i, j));
            };
        }
    }
    document.getElementById("search").onclick = findSeat;
    document.getElementById("male_search").onclick = findMaleSeats;
    initSeats();
};

它来自外部 JS 文件,它是唯一链接到页面的文件。 findSeatfindMaleSeatsgetSeatIdinitSeats 都是稍后在文件中定义的。当我双击此文件时,我收到以下错误:

Windows Script Host
Error: 'window' is not defined
Code: 800A1391

我已经尝试将代码移动到文件中的其他位置,为window.onload 分配不同的函数(甚至是空函数)以及许多其他内容。看来我的电脑不知道window 是什么。如果我尝试在浏览器中打开 HTML,则不会加载任何内容(正如人们所期望的那样)。

有人知道这有什么问题吗?

【问题讨论】:

  • 不相关,但你为什么用 IE 来学习 JavaScript?这是您可以拥有的最糟糕的 JS 环境,与其他浏览器相比,它们的开发工具低于标准。
  • 您是在浏览器中运行此脚本,对吧?从错误消息的外观来看,您的 JavaScript 几乎听起来像是被解释为 VBScript。
  • 显然不是“我的电脑似乎不知道什么是窗口。如果我尝试在浏览器中打开 HTML...”
  • 哇,你们这里的javascript总是那么快吗?无论如何,非常感谢您的帮助,这确实是问题所在。我什至觉得问这样一个愚蠢的问题(现在我看到了答案)有点尴尬。顺便说一句,我没有使用 IE。

标签: javascript dom


【解决方案1】:

window 对象表示浏览器中打开的窗口。由于您不是在浏览器中运行代码,而是通过 Windows 脚本宿主,解释器将无法找到窗口对象,因为它不存在,因为您不在网络浏览器中。

【讨论】:

  • 好的,我们了解它的作用,但是如何解决这个问题呢?
【解决方案2】:

它来自外部 js 文件,它是唯一链接到页面的文件。

好的。

当我双击此文件时,我收到以下错误

听起来您正在双击/运行一个 .js 文件,该文件将尝试在浏览器之外运行脚本,就像命令行脚本一样。这可以解释这个错误:

Windows Script Host Error: 'window' is not defined Code: 800A1391

...不是您在浏览器中看到的错误。当然,浏览器提供了window 对象。

附录:作为一个行动方案,我建议打开相关的HTML 文件 并查看控制台。如果您在那里看不到任何东西,很可能您的window.onload 定义只是在浏览器触发window.onload 事件之后被点击。

【讨论】:

    【解决方案3】:

    试图访问一个未定义的变量会抛出一个ReferenceError

    解决方案是使用typeof:

    if (typeof window === "undefined") {
      console.log("Oops, `window` is not defined")
    }
    

    或尝试捕获:

    try { window } catch (err) {
      console.log("Oops, `window` is not defined")
    }
    

    虽然 typeof window 可能是两者中最干净的,但 try catch 在某些情况下仍然有用。

    【讨论】:

    • 这个答案与原始问题有什么关系?较早的答案(例如accepted answer)已经回答了原始发布者提出的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2017-10-01
    • 1970-01-01
    • 2021-10-06
    • 2019-06-03
    • 2021-01-15
    • 2019-10-12
    • 2013-08-07
    相关资源
    最近更新 更多