我该如何打印JavaScript对象?

3
我有一个对象。
var object= {}

我把一些数据放在对象中,然后我想像这样打印出来

document.write(object.term);

术语是一个变量,根据不同的情况而变化。当我尝试打印它时,会出现未定义的情况。

应该如何处理?

更新:

这是我正在处理的代码。我猜它可能与我上面说的不一样,因为我正在使用selenium和browsermob进行操作,我只是认为它类似于document.write()。以下是代码:

var numCardsStr = selenium.getText("//div[@id='set-middle']/div[2]/h2");

var numCards = numCardsStr.substr(4,2); 

browserMob.log(numCards);

var flash = {}

for(i=0; i<(numCards); i++){

var terms = selenium.getText("//div[@id='words-normal']/table/tbody/tr[" + (i + 2) + "]/td[1]");
var defs = selenium.getText("//div[@id='words-normal']/table/tbody/tr[" + (i + 2) + "]/td[2]");

flash[terms] = defs;

browserMob.log(flash.terms);

}

1
请再添加一些代码。也许错误在于完整的代码中。 - Shamim Hafiz - MSFT
你想要以什么形式输出?使用 console.log 可以吗? - Mark Snidovich
1
你能否添加一些代码,以展示当你“把一些数据放入对象中”时的情况? - Peter Jaric
6个回答

3

编辑:你使用了两个不同的变量名,flashflashcards。我不知道它们是否意味着相同的东西,但是你正在使用[]符号设置值,然后使用.符号获取它。

尝试:

var flash = {};

...

flash[terms] = defs;

browserMob.log(flash[terms]);

如果term是一个变量,用于表示您要检索的属性,则应使用方括号表示法从对象中获取该属性。 示例:http://jsfiddle.net/xbMjc/ (使用警报而不是document.write)
var object= {};

object.someProperty = 'some value';

var term = "someProperty";

document.write( object[term] );  // will output 'some value'

抱歉,是的,它们都应该是Flash,我会更改。 - chromedude
你验证了 termdef 的值吗?尝试将它们记录到控制台中,以查看它们是否符合你的预期。 - user113716
我尝试执行以下操作:browserMob.log(flash[term] + "," + flash[def]); 结果出现了term,undefined,经过思考后发现这是有道理的,因为我假设不能像我所做的那样调用对象的第二部分。你如何调用def? - chromedude
在代码的后面,我有这段代码selenium.type("//input[@id='user-answer']", flash [term]); 这就是打印undefined的原因。 - chromedude
@chromedude - 我猜这会取决于中间发生了什么。我会尝试的第一件事是,在将其值设置为 defs 后立即记录 flash[term],并验证该值是否存在。没有看到您的代码,很难确定发生了什么。 - user113716
显示剩余6条评论

3
如果你正在使用document.write(),有很大可能性是在实例化对象之前尝试引用它。我的建议是:除非你需要在模板中使用它,否则不要使用document.write()。对于所有其他用途,请等待页面加载,然后将脚本作为事件处理程序运行。
失败的原因可能还有其他,但你提供的代码示例不完整,无法进行诊断。

2
要将整个对象输出为文本,请使用JSON库
<script type="text/javascript" src="http://www.JSON.org/json2.js"></script>

.

var o = { "term": "value" };
document.write(JSON.stringify(o, null, 4));

这将以字符串形式输出对象,并缩进4个空格以便于阅读。


您需要执行以下操作:

var terms = "abcd";
var defs = "1234";
var flash = {};
flash[terms] = defs;

这会创建一个对象:
{
    "abcd": "1234"
}

如果您想查看属性(即“abce”),请执行以下操作:

for (var key in flash) {
    document.write('Key "' + key + '" has value "' + flash[key] + '"<br/>');
}

这将输出:
Key "abcd" has value "1234"

1

因为我还没有看到这个被提到:

var a = {prop1:Math.random(), prop2:'lol'};
a.toString = function() {
    output = [];
    for(var name in this) if(this.hasOwnProperty(name) && name != 'toString') {
        output.push([name, this[name]].join(':'));
    }
    return "{\n"+output.join(",\n\t")+"\n}";
};
document.write(a);

// should look like:
/*
    {
        prop1:0.12134432,
        prop2:lol
    }
*/

如果你正在定义一个对象类,比如MyObj

var MyObj = function(id) {
    this.someIdentity = id;
};
MyObj.prototype.toString = function() {
    return '<MyObject:'+this.someIdentity+'>';
};

然后,每当你写下类似于以下的内容时

document.write(new MyObject(2));

它将显示为<MyObject: 2>


1
  • 避免使用document.write

  • 如果您使用Firefox,请安装Firebug并使用其控制台API

  • 相同的控制台API应该也适用于Chrome。

  • 对于IE,请获取CompanionJS

  • 在JavaScript中,如果属性名称事先已知,则使用obj.propertyname。 如果不知道,则:

如果pn包含属性名称,则obj[pn]应该为您提供值。


0

在火狐浏览器和Chrome/Safari中,您可以简单地使用...

var myObj = {id: 1, name: 'Some Name'};
window.console.log(myObj);

控制台将输出类似于“Object”的内容

如果您使用Chrome,可以使用内置的开发人员控制台轻松检查对象的内部值。

如果您使用Firefox,则输出也应该从Firebug中出现...

我提出这个作为使用document.write的替代方案,因为在文档上输出内容对我来说有点侵入性...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接