如何打印javascript对象?

时间:2010-09-18 19:37:55

标签: javascript selenium selenium-ide

我有一个对象

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);

}

6 个答案:

答案 0 :(得分:3)

如果您正在使用document.write(),则很有可能在实例化之前尝试引用该对象。我的建议:除非你在模板中需要它,否则不要使用document.write()。出于所有其他目的,请等待页面加载,然后将脚本作为事件处理程序运行。

可能还有其他原因导致失败,但您的代码示例不够完整,无法进行诊断。

答案 1 :(得分:3)

编辑: 您使用的是两个不同的变量名flashflashcards。我不知道它们是否应该是同一个东西,但您使用[]表示法设置值,然后获取它使用.表示法。

尝试:

var flash = {};

...

flash[terms] = defs;

browserMob.log(flash[terms]);

如果term是表示要检索的属性的变量,则应使用方括号表示法从对象获取属性。

示例: http://jsfiddle.net/xbMjc/ (使用alert而不是document.write)

var object= {};

object.someProperty = 'some value';

var term = "someProperty";

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

答案 2 :(得分:2)

要将整个对象输出为文本,请使用JSON library

<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"

答案 3 :(得分:1)

  • 避免使用document.write

  • 如果您使用Firefox,请安装firebug并使用它console api

  • 同样的控制台api也应该在chrome中工作。

  • 对于IE,请获取companion js

  • 在javascript中,如果属性名称在手边已知,则使用obj.propertyname。如果不是,那么:

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

答案 4 :(得分: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>

答案 5 :(得分:0)

在Firefox和Chrome / Safari中你可以简单地使用...

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

控制台将输出类似“对象”的内容

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

如果你使用firefox,输出也应该来自firebug ......

我说这是使用document.write的替代方法,因为在文档上输出内容对我来说似乎有点侵入...