我正在使用sails.js waterline orm。現在這不是一個特別的問題,但是我必須放置一些上下文,所以當你創建一個記錄時,你會得到一個包含所創建數據的對象。如果記錄具有其他關聯的記錄(集合),則它具有與返回對象中的關鍵字相關的鍵,但這些鍵是getter/setter,即使這些相關對象沒有數據。隱藏屬性到console.log或utils.inspect
我簡化了幾件事情,以揭露主要觀點。
這是我的用戶模型:
var User = {
attributes:
status: {type:'string'}
images: {
collection: 'Image'
}
}
讓assumme,我上的用戶模型,有關聯的圖像集合執行創建查詢。 userRecord是查詢返回的內容。 如果我console.log這出它顯示了與模型本身 相關的屬性,但沒有關聯的記錄,即使密鑰實際存在,您可以 訪問它,但對console.log或utils.inspec不可見當設置顯示隱藏爲真。
console.log(userRecord)
這是獲取返回
{ name: 'zaggen'}
這是應該得到返回
{ name: 'zaggen',
images: [{
path: 'some-path/img.png'
}]
}
,我可以訪問隱藏的屬性是這樣的:
console.log(userRecord.images[0].path)
// outputs some-path/img.png
如何這甚至有可能嗎?據我所知,無法將信息隱藏到節點中的console.log中,除非可能在__proto__
對象中定義屬性時,但在這種情況下,它們不是。
搜索後,我還沒有找到任何東西,它的很奇怪,所以我認爲這可能是一個很好的問題。它會幫助我的工作過程,如果我可以console.log這個信息並獲取所有的數據,現在我可以使用lodash並調用克隆或默認值,我得到它應該的對象。
我知道將enumerable設置爲false可以將屬性從for中隱藏起來,但將其從console.log?隱藏起來,哇,這對我來說是新的,所以我只是進行了檢查,以確保它隱藏起來節點,它仍然顯示在鉻控制檯這是奇怪的,但因爲我問的node.js這個答案是正確的。 – Zagen
@Zagen:console.log是非標準的。它可能在ES7中被標準化。不同的實現可能會以不同的方式實現,因此不同環境下的console.log行爲會有所不同。但是對於大多數實現來說,實現它的最明顯的方法是使用for..in。 – slebetman