【问题标题】:"alert" is not defined when running www.jshint.com运行 www.jshint.com 时未定义“警报”
【发布时间】:2011-11-17 19:52:06
【问题描述】:

我通过简单地添加var alert; 解决了这个问题但是,这是我应该做的让讨厌的错误消息消失吗?这是修复。这是www.jshint.com 的失败。

我正在尝试从它引发的错误中学习。不一定会让它们消失。

(function () {

"use strict";

var alert;  //  added this in to fix

function initialize_page()
  {
  alert ("hi");
  }

addEventListener('load', initialize_page);

})();

【问题讨论】:

  • jslint 是一个语法检查器,它可以为您提供反馈。如果你使用 vim,我建议你安装它。
  • 我运行你的代码没有任何问题
  • @epascarello,读得很好,但我同意 Crockford 的报价。
  • @zzzzBov 有些人喝 Crockford 的 KoolAid,有些人不喝。 :)

标签: javascript


【解决方案1】:

代替

alert('message')

你应该使用

window.alert('message');

因为这个方法is defined in window object

这当然假设您在.jshintrc 中将browser 选项设置为true,所以这样jshint 会知道窗口对象已暴露。

"browser"       : true,     // Standard browser globals e.g. window, document.

*confirm() 也会发生同样的情况。

【讨论】:

  • 这是保持 browser:true 的唯一解决方案。在我看来,这是最好的解决方案。
  • 我同意,这是立竿见影的解决方案。
【解决方案2】:

This 文档对browser 选项进行了以下说明:

此选项定义了现代浏览器公开的全局变量:从优秀的文档和导航器到 HTML5 FileReader 以及浏览器世界的其他新发展。 注意:此选项不会公开警报或控制台等变量。有关详细信息,请参阅选项开发。

以及关于devel 选项的以下内容:

此选项定义了通常用于记录穷人调试的全局变量:控制台、警报等。通常最好不要在生产环境中发布它们,因为例如,console.log 会中断旧版 Internet Explorer。

您启用了 browser 并禁用了 devel。您可以使用 jshint 原始页面上“假设”下的复选框来控制这些。我还建议注意文档中的警告;-)

【讨论】:

  • 我只是点击jshint.com上的开发框,选项必须是非在线版本的。
  • 在 JSLint for Visual Studio 中,复选框值为“假设开发全局变量”
  • 您也可以在本地 .jshintrc 文件中设置此选项。
【解决方案3】:

在选项中设置“devel:true”。这会启用警报、控制台等功能。

在此处查看文档:http://jshint.com/docs/options/

【讨论】:

  • 谢谢,这是我的问题,添加此配置选项立即解决!
【解决方案4】:

VS Code 中使用 .jshintrc 文件或 CTRL + , 来编辑 jshint 的选项。

在 js 警报(data.status);或 window.alert(data.status);

"window": true,
"alert": true

最好的

"devel": true,

{
"esversion": 6,
"browser": true,
"undef": true,
"varstmt": true,
"forin": true,
"unused": true,
"funcscope": true,
"lastsemic": true,
"moz": true,
"jquery": true,
"module": true,
"devel": true,
"globals": {
    "window": true,
    "document": true,
    "console": true,
    "alert": true
}

}

【讨论】:

    【解决方案5】:
    function prod(arr) {
        let largest = 0;
        let secondLargest = 0;
        const len = arr.length;
        for (let i = 0; i < len; i++) {
            if (arr[i] > largest) {
                secondLargest = largest;
                largest = arr[i];
            }
            else if (arr[i] < largest && arr[i] > second_largest) {
                secondLargest = arr[i]
            }
        }
        return largest * secondLargest;
    }
    
    console.log(prod([2, 4, 7, 8]));
    

    【讨论】:

      【解决方案6】:

      代替:

      alert('message')
      

      我用:

      var alert = window['alert'];
      

      【讨论】:

        【解决方案7】:

        尝试将窗口对象传入:

        (function (global) {
        
        "use strict";
        
        var alert;  //  added this in to fix
        
        function initialize_page()
          {
          global.alert ("hi");
          }
        
        addEventListener('load', initialize_page);
        
        })(window);
        

        【讨论】:

        • 需要设置devel:true,而不仅仅是browser:true。请参阅此处的文档:jshint.com/options
        • 对于这么小的问题,这是一个非常丑陋的解决方案。
        • 这可以通过 jshint 指令的devel: true 来完成,而不是添加额外的代码
        【解决方案8】:

        将警报声明为变量,它无需任何设置即可工作:

        例如:

        var alert;
        
        alert('hello world');
        

        【讨论】:

          猜你喜欢
          • 2012-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-22
          相关资源
          最近更新 更多