[英]Why am i getting output as [object Object] instead of [Id: id_value] when using Spidermonkey
我在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; }
當我運行以下命令時:
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 }
那么,我該如何糾正呢?
如果您可以控制對象的打印位置,請在打印之前嘗試在對象上使用JSON.stringify
。
可能這可能有效(未經測試):
js> JSON.stringify(getPersons([1,-2,3]));
與其他答案一樣,JSON通常是細讀簡單對象內容的有用且快速的方法。 但是,如果要自定義每個對象的輸出(例如,當使用復雜的對象,工廠,類...時),或者如果要直接使用console.log
,則應實現toString()
方法:
var person = {
id: 123,
toString: function() {
return '[Id: ' + this.id + ']'
}
};
person
//=> [Id: 123]
請注意,JS外殼的行為各不相同。 例如,雖然您的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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.