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

}
4

6 回答 6

3

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

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

于 2010-09-18T19:41:03.783 回答
3

编辑: 您使用了两个不同的变量名,flash并且flashcards. 我不知道它们是否意味着相同,但您使用符号设置[],然后使用符号获取.

尝试:

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'
于 2010-09-18T19:42:23.610 回答
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"
于 2010-09-18T19:51:20.547 回答
1
  • 避免 document.write

  • 如果您使用 Firefox,请安装 firebug 并使用它的控制台 api

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

  • 对于IE,获取配套js

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

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

于 2010-09-18T19:44:18.423 回答
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>.

于 2010-09-18T19:58:50.587 回答
0

那么在 Firefox 和 Chrome/Safari 中,您可以简单地使用...

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

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

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

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

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

于 2010-09-19T03:50:33.067 回答