Como acesso as propriedades de um objeto javascript se não souber os nomes?

Diga que você tem um objeto javascript como este:

var data = { foo: 'bar', baz: 'quux' };

Você pode acessar as propriedades pelo nome da propriedade:

var foo = data.foo;
var baz = data["baz"];

Mas é possível obter esses valores se você não souber o nome das propriedades? A natureza desordenada dessas propriedades torna impossível diferenciá-las?

No meu caso, estou pensando especificamente em uma situação em que uma função precisa aceitar uma série de pares nome-valor, mas os nomes das propriedades podem muda

Meus pensamentos sobre como fazer isso até agora são passar os nomes das propriedades para a função junto com os dados, mas isso parece um hack. Eu preferiria fazer isso com introspecção, se possíve

questionAnswers(8)

yourAnswerToTheQuestion