我在mac终端上使用vi编辑器并编写了一些Javascript代码。当我使用Spidermonkey Engine运行此代码时:
function getPerson(id) {
if (id < 0) {
throw new Error('ID must not be negative: '+id);
}
return { id: id };
}
function getPersons(ids) {
var result = [];
ids.forEach(function (id) {
try {
var person = getPerson(id);
result.push(person);
} catch (exception) {
print(exception);
}
});
return result;
}
&#13;
当我运行以下命令时:
js -f exc.js -i
js> getPersons([1,-2,3]);
我收到以下回复:
Error: ID must not be negative: -2
[object Object],[object Object]
而不是:
Error: ID must not be negative: -2
{ id: 1 }, { id: 3 }
那么,我该怎么纠正这个?
答案 0 :(得分:0)
如果您可以控制对象的打印位置,请在打印对象之前尝试使用JSON.stringify
。
这可能有效(未经测试):
js> JSON.stringify(getPersons([1,-2,3]));
答案 1 :(得分:0)
JSON,就像在另一个答案中一样,通常是一种有用而快速的方法来仔细阅读简单对象的内容。但是,如果要自定义每个对象的输出(例如,在使用复杂对象,工厂,类......时),或者如果要直接使用console.log
,则应实现toString()
方法:< / p>
var person = {
id: 123,
toString: function() {
return '[Id: ' + this.id + ']'
}
};
person
//=> [Id: 123]
请注意,JS shell的行为会有所不同。例如,虽然您的JS shell似乎调用toString()
来打印值(默认的toString()
实现返回[object Object]
),但Node.js将具有“更有帮助”的行为,类似于漂亮打印对象,变量和函数以原生的方式:
> console.log(person)
{ id: 123 }
即使我的本地版本的SpiderMonkey也有不同的行为:
js> person
({id:123})
因此,不要依赖此输出来获得强大的功能。如果你想在SpiderMonkey中隐式可靠地调用toString()
,可以使用旧的字符串强制:
js> ''+person
"[Id: 123]"
或print()
功能:
js> print(person)
[Id: 123]