这几天一直在看nodejs,简单的写了一个小blog.发现js跟其他的语言有很大的区别.
比如说下面:
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
刚开始就有点懵了起初我认为: process.env.PORT 和 '3000' 的值都为 true; || 是求Boolean ,后来发现,我错了。
原因是这样的:
首先js 会将 && 和|| 两边的值转成Boolean 类型,然后再算值 ,&&运算如果返回true,则取后面的值,如果|| 返回true,则取前面的值 , 而其中数值转换成boolean 的规则 是:对象、非零整数、非空字符串返回true,其它为false ;a && b 的运算就是 :因为 a 和 b全是非零整数,所以 a 和 b 也就是true ,而 true && true 返回 true ,则取后面的b ,同理 a 和b 全是非零整数,a 和b 全是true ,则true || true 返回 true ,取|| 前面的值 也就是2;同样:该逻辑运算符支持短路原则:
如
var a = “” || null || 3 || 4 —-> var a = fasel || false || true || true 结果为true
则返回第一个true,即是3
var b = 4 && 5 && null && 0 ——> var b = true && true && false && false 结果是false
则返回第一个false 即是null .