這幾天一直在看nodejs,簡單的寫了一個小blog.發(fā)現(xiàn)js跟其他的語言有很大的區(qū)別.
比如說下面:
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
剛開始就有點懵了起初我認為: process.env.PORT 和 '3000' 的值都為 true; || 是求Boolean ,后來發(fā)現(xiàn)喊衫,我錯了忆首。
原因是這樣的:
首先js 會將 && 和|| 兩邊的值轉(zhuǎn)成Boolean 類型,然后再算值 ,&&運算如果返回true审洞,則取后面的值蚯瞧,如果|| 返回true,則取前面的值 , 而其中數(shù)值轉(zhuǎn)換成boolean 的規(guī)則 是:對象掂铐、非零整數(shù)罕拂、非空字符串返回true,其它為false ;a && b 的運算就是 :因為 a 和 b全是非零整數(shù),所以 a 和 b 也就是true ,而 true && true 返回 true ,則取后面的b ,同理 a 和b 全是非零整數(shù)全陨,a 和b 全是true ,則true || true 返回 true ,取|| 前面的值 也就是2爆班;同樣:該邏輯運算符支持短路原則:
如
var a = “” || null || 3 || 4 —-> var a = fasel || false || true || true 結(jié)果為true
則返回第一個true,即是3
var b = 4 && 5 && null && 0 ——> var b = true && true && false && false 結(jié)果是false
則返回第一個false 即是null .