Как я могу напечатать объекты JavaScript? - PullRequest
3 голосов
/ 18 сентября 2010

У меня есть объект

var object= {}

Я помещаю некоторые данные в объект, а затем хочу напечатать его вот так

document.write(object.term);

термин является переменной, которая изменяется в зависимости от различных ситуаций. Когда я пытаюсь распечатать это, он приходит с неопределенным.

Как бы это было сделано?

Обновление:

это код, с которым я имею дело. Я думаю, что это, вероятно, не то же самое, что я сказал выше, потому что я делаю это в селене с 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 ]

3 голосов
/ 18 сентября 2010

РЕДАКТИРОВАТЬ: Вы используете два разных имени переменной, 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'
3 голосов
/ 18 сентября 2010

Если вы используете document.write (), есть хороший шанс, что вы пытаетесь ссылаться на объект до того, как он будет создан. Мой совет: не используйте document.write (), если он не нужен в шаблоне. Для всех остальных целей дождитесь загрузки страницы, а затем запустите ваш скрипт как обработчик событий.

Могут быть и другие причины сбоя, но пример кода недостаточно для диагностики.

2 голосов
/ 18 сентября 2010

Чтобы вывести весь объект в виде текста, используйте библиотеку 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 голос
/ 18 сентября 2010

Потому что я еще не видел упомянутое:

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 голос
/ 18 сентября 2010
  • Избегайте document.write

  • Если вы используете Firefox, установите firebug и используйте console api

  • Та же консольная apis должна работать и в Chrome.

  • Для IE, получить companion js

  • В javascript obj.propertyname используется, если имя свойства известно заранее.Если это не так, то:

, если pn содержит имя свойства, obj [pn] должно дать вам значение.

0 голосов
/ 19 сентября 2010

Ну, в Firefox и в Chrome / Safari вы можете просто использовать ...

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

И консоль выведет что-то вроде «Объекта»

Если вы находитесь в Chrome, вы можете легко проверить внутренние значения объекта с помощью встроенной консоли разработчика.

Если вы используете Firefox, вывод также должен получаться из Firebug ...

Я утверждаю, что это альтернатива использованию document.write, поскольку мне кажется немного инвазивным выводить содержимое документа ...

...