Como percorrer ou enumerar um objeto JavaScript?

Tenho um objeto JavaScript como o seguinte:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

Agora eu quero passar por todos osp elementos p1, p2, p3 ...) E obtenha suas chaves e valores. Como eu posso fazer isso

Eu posso modificar o objeto JavaScript, se necessário. Meu objetivo final é percorrer alguns pares de valores-chave e, se possível, eu quero evitar o uso deeval.

questionAnswers(30)

yourAnswerToTheQuestion