打印JavaScript对象的内容?
通常情况下,如果我们只使用alert(object);
它会显示为[object Object]
。 如何在JavaScript中打印一个对象的所有内容参数?
如果您使用的是Firefox, alert(object.toSource())
应该足以实现简单的debugging目的。
这将给你带有缩进的JSON对象非常好的输出:
alert(JSON.stringify(YOUR_OBJECT_HERE, null, 4));
第二个参数在返回之前改变了string的内容。 第三个参数指定了多less空格作为空白用于可读性。
除了使用debugging器外,还可以使用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)也都有内置的debugging工具,您应该检查。
如果您只想使用对象的string表示forms,则可以使用JSON.stringify
函数,使用JSON库 。
打印您可以使用的对象的内容
console.log(obj_str);
你可以看到像下面的控制台的结果。
Object {description: "test"}
对于打开的控制台,在Chrome浏览器中按F12,您将在debugging模式下find控制台选项卡。
您应该考虑使用FireBug进行JavaScriptdebugging。 它可以让你互动地检查你所有的variables,甚至可以遍历函数。
使用目录(对象)。 或者你可以随时下载Firefox的Firebug (真的很有帮助)。
你可以通过Node的util.inspect(object)来打印出对象的结构。
当你的对象具有循环依赖时,这是特别有用的
$ 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抛出exception: TypeError: Converting circular structure to JSON
所有的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');
你可以在他们的原型中给你的对象自己的toString方法。
您可以使用http://www.json.org/js.html中的; json.js将json数据更改为string数据。
您还可以使用Prototype的Object.inspect()方法,该方法“返回对象的面向debugging的string表示forms”。
简单的function来提醒对象或数组的内容。
用一个数组或string或者一个对象来调用这个函数来提醒内容。
function
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);
Internet Explorer 8具有类似于Firebug for Firefox的开发工具。 歌剧有Opera DragonFly,Google Chrome也有一些叫做开发者工具(Shift + Ctrl + J)的东西。
以下是IE6-8中更详细的debuggingJavaScript的答案: 使用IE8的“开发工具”debugging早期的IE版本
我面临类似的问题,原因是我利用Ajax来获取数据。 在这种情况下,我做了两个asynchronous的Ajax调用。 在一个我只是返回string味精和显示警报。 在第二个Ajax调用我以json格式获取arraylist并在js中解码。 所以我的第二个请求用来处理第一,我得到对象的警报。
所以只需检查。 1.警报应该包含string。 2.如果你得到arrayList或任何其他的对象解码它。
祝一切顺利!