Ответ 1

Цикл for in может дать вам ключ и значение.

for(p in foo) {
    console.log (p, foo[p])
}

Из консоли:

foo = {bar: "baz"}

Object
bar: "baz"
__proto__: Object

for(p in foo) { console.log (p, foo[p]) }
> bar baz

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

for(p in foo) {
    if (foo.hasOwnProperty(p)) {
        console.log (p, foo[p])
    }
}

Ответ 2

Вы можете выполнить цикл:

for(var i in foo) {
  console.log( i + ": " + foo[i] + "<br />");
}

Демо

Ответ 3

Это может быть разным для разных платформ, на которых вы сейчас работаете. Если вы используете терминал, вы используете print, если у вас нет объекта console, вы можете использовать document.write() и так далее.

Вот что вы можете использовать/прочитать для понимания:

var foo = {bar: "baz", boolean: true, num: 2}

for (i in foo) {
//checks to see where to print.
if (typeof console === 'object') 
    console.log(i + ": " + foo[i]);
else if (typeof document === 'object') 
    document.write(i + ": " + foo[i]);
else 
    print(i + ": " + foo[i]);
}

В качестве альтернативы, если вы просто скажете console.log(foo) в Chrome/Firefox, браузеры сделают выделение циклов для вас и дадут вам красивую печать вашего объекта, поэтому вам действительно не нужно делать цикл, показанный выше.

Вы также можете использовать console.debug(foo) вместо console.log(foo), разница тонкая. Вы можете узнать больше об этом на http://getfirebug.com/wiki/index.php/Console_API