打印JavaScript对象的内容?

通常情况下,如果我们只使用alert(object);,它将显示为[object Object]。如何在JavaScript中打印对象的所有内容参数?

697863 次浏览

你应该考虑使用FireBug进行JavaScript调试。它将允许您交互式地检查所有变量,甚至逐步通过函数。

使用dir(对象)。或者你可以下载Firefox的Firebug(真的很有用)。

你也可以使用Prototype的object .inspect()方法,该方法“返回对象的面向调试的字符串表示”。

http://api.prototypejs.org/language/Object/inspect/

如果你只是想要一个对象的字符串表示形式,你可以使用JSON.stringify函数,使用JSON库

除了使用调试器,还可以使用foreach循环访问对象的所有元素。下面的printObject函数应该alert()你的对象,显示所有属性和各自的值。

function printObject(o) {
var out = '';
for (var p in o) {
out += p + ': ' + o[p] + '\n';
}
alert(out);
}


// now test it:
var myObject = {'something': 1, 'other thing': 2};
printObject(myObject);

使用DOM检查工具更可取,因为它允许您挖掘对象本身的属性。Firefox有FireBug,但所有其他主要浏览器(IE、Chrome、Safari)也有内置的调试工具,你应该检查一下。

ie8有类似于Firefox的Firebug的开发工具。Opera有Opera DragonFly,谷歌Chrome也有开发人员工具(Shift+Ctrl+J)。

下面是在IE6-8中调试JavaScript的更详细的答案: 使用IE8 '开发者工具'调试较早的IE版本 < / p >

如果您正在使用Firefox, alert(object.toSource())应该足以用于简单的调试目的。

你可以在你的对象原型中给他们自己的toString方法。

你可以使用http://www.json.org/js.html中的json.js将json数据更改为字符串数据。

这将为您提供非常好的输出,使用JSON.stringify的缩进JSON对象:

alert(JSON.stringify(YOUR_OBJECT_HERE, null, 4));

第二个参数(replacer)在返回字符串之前改变字符串的内容。

第三个参数(space)指定使用多少个空格作为可读性的空白。

JSON.stringify文档。

所有Javascript !

String.prototype.repeat = function(num) {
if (num < 0) {
return '';
} else {
return new Array(num + 1).join(this);
}
};


function is_defined(x) {
return typeof x !== 'undefined';
}


function is_object(x) {
return Object.prototype.toString.call(x) === "[object Object]";
}


function is_array(x) {
return Object.prototype.toString.call(x) === "[object Array]";
}


/**
* Main.
*/
function xlog(v, label) {
var tab = 0;


var rt = function() {
return '    '.repeat(tab);
};


// Log Fn
var lg = function(x) {
// Limit
if (tab > 10) return '[...]';
var r = '';
if (!is_defined(x)) {
r = '[VAR: UNDEFINED]';
} else if (x === '') {
r = '[VAR: EMPTY STRING]';
} else if (is_array(x)) {
r = '[\n';
tab++;
for (var k in x) {
r += rt() + k + ' : ' + lg(x[k]) + ',\n';
}
tab--;
r += rt() + ']';
} else if (is_object(x)) {
r = '{\n';
tab++;
for (var k in x) {
r += rt() + k + ' : ' + lg(x[k]) + ',\n';
}
tab--;
r += rt() + '}';
} else {
r = x;
}
return r;
};


// Space
document.write('\n\n');


// Log
document.write('< ' + (is_defined(label) ? (label + ' ') : '') + Object.prototype.toString.call(v) + ' >\n' + lg(v));
};






// Demo //


var o = {
'aaa' : 123,
'bbb' : 'zzzz',
'o' : {
'obj1' : 'val1',
'obj2' : 'val2',
'obj3' : [1, 3, 5, 6],
'obj4' : {
'a' : 'aaaa',
'b' : null
}
},
'a' : [ 'asd', 123, false, true ],
'func' : function() {
alert('test');
},
'fff' : false,
't' : true,
'nnn' : null
};


xlog(o, 'Object'); // With label
xlog(o); // Without label


xlog(['asd', 'bbb', 123, true], 'ARRAY Title!');


var no_definido;
xlog(no_definido, 'Undefined!');


xlog(true);


xlog('', 'Empty String');

提醒对象或数组内容的简单函数 使用数组或字符串或对象调用此函数,它会提醒内容

函数

function print_r(printthis, returnoutput) {
var output = '';


if($.isArray(printthis) || typeof(printthis) == 'object') {
for(var i in printthis) {
output += i + ' : ' + print_r(printthis[i], true) + '\n';
}
}else {
output += printthis;
}
if(returnoutput && returnoutput == true) {
return output;
}else {
alert(output);
}
}

使用

var data = [1, 2, 3, 4];
print_r(data);

你可以用Node的util.inspect(对象)来打印出对象的结构。

当你的对象有循环依赖时,这是特别有用的。

$ node


var obj = {
"name" : "John",
"surname" : "Doe"
}
obj.self_ref = obj;


util = require("util");


var obj_str = util.inspect(obj);
console.log(obj_str);
// prints { name: 'John', surname: 'Doe', self_ref: [Circular] }

它是JSON。stringify抛出异常:TypeError: Converting circular structure to JSON

打印可以使用的对象的内容

console.log(obj_str);

你可以在控制台看到结果,如下图所示。

Object {description: "test"}

打开控制台按F12在chrome浏览器,你会发现控制台选项卡在调试模式。

我也遇到了类似的问题,原因是我使用ajax获取数据。 在这种情况下,我已经做了两个异步ajax调用。在一个我只是返回字符串msg和显示在警报。在第二ajax调用我获取数组列表在json格式和解码它在js。 所以我的第二个请求使用处理第一和我得到警报的对象

检查一下。 1. 警报应该包含字符串。 2. 如果你得到数组列表或任何其他对象解码它

祝你一切顺利!