2015-08-21 100 views
0

如果是這樣的noob問題,我很抱歉。但我一直在檢查global變種node.js,並被語法所困擾。 這顯然是一個JSON對象,但它看起來像:方括號內的Node.js函數語法[函數]或[函數:isBuffer]

reallyExit: [Function: reallyExit], 
binding: [Function: binding], 
exit: [Function] 

因此,我的具體問題是:1。 如果他們有一個函數對象,爲什麼他們把它放在方括號? 2.爲什麼他們把一個鍵值對置於括號內? [Function: reallyExit] 3.什麼是那麼關鍵定義的區別:[Function: reallyExit][Function]

回答

5

這顯然是一個JSON對象

不,事實並非如此。 Acceptable types in JSON確實不是包括函數。由於這些變量是函數,因此您所看到的是函數而不是對象的toString

爲什麼他們把一個鍵值對置於括號內?

如果您使用console.log節點命令行內的話,而不是一個正常的toString,你可能看到的util.inspect輸出。而不是正常的toStringutil.inspect給出了「...對象的字符串表示,這對調試很有用」。

換句話說,節點的console.log將使用括號作爲簡潔的方式來表示的各種對象,功能,陣列等

什麼然後在鍵定義的區別:[功能:reallyExit]對[功能]

區別在於前者是function declaration,後者是function expression。例如:

> function y() {} 
> var x = function() {}; 
> y; 
[Function: y] 
> x; 
[Function] 
+1

這是如何回答我的問題,我沒有理解?官方文檔稱'global'是一個{object}。 https://nodejs.org/api/globals.html – AVX

+0

@AVX'global'是一個對象,但這並不能使它成爲JSON。 'binding'和'exit'(它們本質上是'global'的字段)是_functions_,這就是爲什麼你看到它們打印出不同的原因。我已經更新了我爲什麼獲得這種格式的答案。 – SlightlyCuban

+0

非常感謝!這是一個很好的解釋! – AVX

1

這是JavaScript對象在處理toString時所採用的格式。 [Function: something]不是鍵值對。在這裏,我認爲你得到了對象的原型(Function),並聲明瞭它的名字(當它最初不是一個匿名函數時)。

Javascript對象不是JSON-s。 JSON是交換數據的符號。它來源於Javascript,但現在是一種獨立的格式。

+0

所以[]在這個意義上有第三個含義,而不是一個對象的數組或索引? – AVX

+0

你不能在代碼中使用''''。它僅僅是一種用於在控制檯,日誌等中表示對象的格式。它與Javascript既不是語法也不是JSON完全無關。 – ralh