2017-02-23 70 views
10

有人可以請解釋這裏發生了什麼?我看到%d%s但我沒有看到這些聲明或寫在代碼中的任何其他地方。這到底意味着什麼/在JavaScript中做什麼?我假設這是一種我以前從未見過的字符串模板化?Javascript:%s或%d代表字符串?

passport.deserializeUser(
 
    (id, done) => { 
 
    debug('will deserialize user.id=%d', id) 
 
    User.findById(id) 
 
     .then(user => { 
 
     debug('deserialize did ok user.id=%d', user.id) 
 
     done(null, user) 
 
     }) 
 
     .catch(err => { 
 
     debug('deserialize did fail err=%s', err) 
 
     done(err) 
 
     }) 
 
    } 
 
)

+2

它不是JavaScript的一部分,只是看起來像'debug'解釋的東西。什麼是「調試」? (它可能是利用Node的內置[util.format](https://nodejs.org/api/util.html#util_util_format_format_args)。) – Ryan

+0

@Ryan有趣...它是一個npm模塊https:// www.npmjs.com/package/debug - 看起來像'util.format'正是它使用的。 – Turnipdabeets

+0

這只是控制檯對象功能的一部分,大概是'debug'正在使用。 – 1252748

回答

15

你們看到沒有內置到的console.log的字符串替換模式()或console.debug()。

圖案變爲如我介紹如下:

%S爲字符串值

%d%I用於整數值

%f爲一個浮點數

%氧氣爲對象的超鏈接

所以基本上你正在經如此提供的值替換值:

var name = 'Chris'; 
console.log('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 

console.debug('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 
+0

從什麼時候開始這是console.log的一部分?哇,我不相信我從來沒有聽說過這個。 – Turnipdabeets

+0

我不太確定這件事多久;但是,我知道它或多或少是瀏覽器特定的。說到這一點,每個'現代'瀏覽器都有自己的JavaScript調試處理程序/應用程序,這是有限制的。 –

1

那很可能是特定的調試(的東西),因爲沒有內置的字符串中的JavaScript格式(不無庫)。

但是,%d被整數替換,並且%s被字符串替換。例如:

debug("I'm %s and I'm %d years old", "John", 10) 

應該打印:我是約翰,我10歲。

這裏是如果你有興趣,你可以使用一個庫:http://www.diveintojavascript.com/projects/javascript-sprintf

+0

Thanks @Bruno,yea debug是一個npm模塊npmjs.com/package/debug – Turnipdabeets

+0

很高興幫助@安娜! –

1

console.log()console.debug()使用printf樣式的格式。下面是官方支持的格式化:

格式化表示:

  • %O漂亮地打印在多條線路的對象。
  • %o漂亮的打印對象都在一行上。
  • %s字符串。
  • %d數字(整數和浮點數)。
  • %j JSON。如果參數包含循環引用,則替換爲字符串'[Circular]'。
  • %%單個百分號('%')。這不會消耗一個參數。

結果寫入調試控制檯。只需打開命令行或者終端和使用該運行它:

node debug [script.js | -e "script" | <host>:<port>] command 
+0

我運行了該命令,但出現錯誤:-bash:-e:命令未找到 -bash:host:沒有這樣的文件或目錄 (node:62955)Node的調試器出現內部錯誤。請報告這個錯誤。 寫EPIPE 錯誤:在exports._errnoException寫EPIPE (util.js中1022:11) 在WriteWrap.afterWrite [爲的onComplete(net.js:804:14) – Turnipdabeets

+0

哪些環境中使用Windows,Linux或蘋果電腦? – Teocci

+0

@Tecci我正在使用mac – Turnipdabeets

相關問題