admin管理员组

文章数量:1321595

I have an object

var object= {}

I put some data in the object and then I want to print it like this

document.write(object.term);

the term is a variable that changes depending on different situations. When I try printing this it es up with undefined.

How would it be done?

Update:

this is the code I am dealing with. I guess it probably isn't the same as what I said above because I am doing it in selenium with browsermob, I just thought it would be similar to document.write(). Here is the code

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

}

I have an object

var object= {}

I put some data in the object and then I want to print it like this

document.write(object.term);

the term is a variable that changes depending on different situations. When I try printing this it es up with undefined.

How would it be done?

Update:

this is the code I am dealing with. I guess it probably isn't the same as what I said above because I am doing it in selenium with browsermob, I just thought it would be similar to document.write(). Here is the code

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

}
Share Improve this question edited Sep 18, 2010 at 19:54 chromedude asked Sep 18, 2010 at 19:37 chromedudechromedude 4,30216 gold badges69 silver badges96 bronze badges 3
  • 1 Add a bit more code please. Perhaps the error lies in the plete code. – Shamim Hafiz - MSFT Commented Sep 18, 2010 at 19:41
  • How do you want it to be output? Would console.log work? – Mark Snidovich Commented Sep 18, 2010 at 19:41
  • 1 Can you add some code that shows when you "put some data in the object"? – Peter Jaric Commented Sep 18, 2010 at 19:41
Add a ment  | 

6 Answers 6

Reset to default 3

EDIT: You're using two different variable names, flash and flashcards. I don't know if they are meant to be the same thing, but you are setting the value using the [] notation, then getting it using . notation.

Try:

var flash = {};

...

flash[terms] = defs;

browserMob.log(flash[terms]);

If term is a variable to represent the property you are retrieving, then you should use the square bracket notation for getting the property from the object.

Example: http://jsfiddle/xbMjc/ (uses alerts instead of document.write)

var object= {};

object.someProperty = 'some value';

var term = "someProperty";

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

If you're using document.write(), there's a good chance you are trying to reference the object before it's been instantiated. My advice: don't use document.write() unless you need it in a template. For all other purposes, wait till the page loads and then run your script as an event handler.

There could be other reasons for the failure, but your code sample isn't plete enough for a diagnosis.

To output the whole object as text, use a JSON library:

<script type="text/javascript" src="http://www.JSON/json2.js"></script>

.

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

This will output the object as a string and indent 4 spaces to make it easy to read.


What you do is this:

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

This creates this object:

{
    "abcd": "1234"
}

If you want to go through the properties (i.e. "abce"), do this:

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

This will output:

Key "abcd" has value "1234"

Because I haven't seen this mentioned yet:

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
    }
*/

In the case that you're defining an object class, like MyObj:

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

And then anytime you write something like

document.write(new MyObject(2));

It'll appear as <MyObject: 2>.

  • Avoid document.write

  • If you use Firefox, install firebug and use it's console api

  • The same console apis should work in chrome too.

  • For IE, get panion js

  • In javascript, obj.propertyname is used if the property name is known before hand. If it's not, then:

if pn contains the property name, obj[pn] should give you the value.

Well in firefox and in Chrome/Safari you could simply use...

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

And the console will output something like "Object"

If you are in Chrome you could inspect the internal values of the object with ease using the built in developer console.

If you use firefox the output should e out of firebug as well...

I'm stating this as an alternative of using document.write as it seems a little bit invasive to me to output content on the document...

本文标签: seleniumHow can I print javascript objectsStack Overflow