【问题标题】:javascript alert function won't show objectsjavascript警报功能不会显示对象
【发布时间】:2014-12-09 17:33:59
【问题描述】:

我想查看obj的值,使用如下代码

var obj = { 
            x: 'abc',
            y: 2,
            z: 3 
                   };

当我使用 alert(obj) 时,它只会给我 [object Object]。 当我使用 console.log(obj) 时,它会在控制台中正确显示对象

为什么这个警报功能不能按原样显示对象...???

是否还有警报功能无法正确显示的数据类型

【问题讨论】:

  • alert 将对象转换为字符串。您可以将 toString 方法添加到您的对象 - 像这样 jsbin.com/yofibe/1/edit
  • alert() 接受字符串参数,所以不确定你在期待什么。使用console.log() 有什么问题,这是获取调试信息的首选方法。
  • alert(toString.call(obj)); 本质上就是您所看到的。

标签: javascript oop


【解决方案1】:
   alert(JSON.stringify(obj))

返回对象的属性名称及其值的字符串。

【讨论】:

  • 确保在使用它之前先在浏览器中测试 JSON 对象。这将在 IE8 或更低版本中中断。
【解决方案2】:

警报的消息参数:

message 是要在警报对话框中显示的可选文本字符串,或者是转换为字符串并显示的对象。

https://developer.mozilla.org/en-US/docs/Web/API/Window.alert

由于它将所有内容都转换为字符串,这意味着它使用返回[object Object]object.toString() 方法。格式化输出的方法有很多种(参见@kennebec 的回答),但您也可以覆盖其toString 方法。

下面是一个简单的例子,将其覆盖为格式良好的字符串:

var obj = {
  x: 'abc',
  y: 2,
  z: 3
};

Object.prototype.toString = function() {
  var output = "";
  for (var i in this) {
    output += i + ": " + this[i] + "\n";
  }
  return output;
}

alert(obj);

【讨论】:

    【解决方案3】:

    使用

    console.log(obj)
    

    在现代浏览器中显示对象。如果您使用的是 Chrome,请按 Shift+Ctrl+J 或 F12 以查看控制台。

    警报仅显示字符串或可以转换为字符串的变量(long、float、integer)。 Alert 不能显示任何对象,包括数组,也不能显示纯 JSON/XML 或 DOM 元素。请注意向后兼容性,因为 console.log() 会破坏 IE8 (Windows XP) 中的 javascript。在调用 console.log() 命令之前,您可以执行其他 JavaScript 测试来测试 IE8 的兼容性。

    【讨论】:

    • 投反对票可能是因为它没有解决问题,其中 OP 提到他们在 console.log(obj) 中看到了他们期望的 alert(obj) 的输出。
    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2020-03-23
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多