@hotjp
2017-01-25T06:40:50.000000Z
字数 2036
阅读 1370
培训
以下常见表达式都返回false:
- nul
- undefined
- '' 空字符串
- 0 数字0
以下常见表达式都返回true:
- '0' 字符串
- [] 空数组
- {} 空对象
可能会有某些判断:
while(x != null){}
在你不希望x是0、空字符串和false的情况下可以改写:
while(x){}
想要检查字符串是否为null或空:
if(y != null && y != ''){}
可以直接改写
if(y){}
另外还有一些不直观的布尔表达式:
0
- Boolean('0') == true
- '0' != true
- 0 != null
- 0 == []
- 0 == false
null
- Boolean(null) == false
- null != true
- null != false
undefined
- Boolean(undefined) == false
- undefined != true
- undefined != false
[]
- [] != true
- [] == false //空数组等于false
{}
- Boolean({}) == true
- {} != true
- {} != false
? :下面这段代码可以被三元操作符替换
//常见的if判断if(val != 0){return foo();}else{return bar();}//可以写成return val ? foo() : bar();
生成html的时候是很有用的
//checkboxvar isChecked = false, isEnabled = true;var ipt = '<input type="checkbox" '+(isChecked ? 'checked' : '') +(isEnabled ? '' : 'disabled') +' name="foo" >';//活动状态var isActive = true;var status = '<span class="status'+(isActive ? ' active' : '') +'">'+(isActive ? '活动进行中' : '活动已结束') +'</span>'
&& 和 || (二元布尔操作符)这对二元布尔操作符可以根据前面的代码判断后面的代码是否执行,也就是说只有在必要的时候才会执行后面的代码,|| 可以被成为默认操作符,因为它可以替代下面的情况:
//参数判断function foo(opt_win){var win;if(opt_win){win = opt_win;}else{win = window;}//...};//可以转换为function foo(opt_win){var win = opt_win || window;//...};//jQuery操作classname$("a").on("click", function(){//常见写法if($(this).hasClass("on")){$(this).removeClass("on");}//使用||操作符,前项为false时执行后项,可以使用$(this).hacClass("on") || $(this).addClass("on");});
是不是瞬间就觉得自己是老司机了?
&& 也可以用来缩减代码量
if(node){if(node.kids){if(node.kids[index]){foo(node.kids[index]);}}}//可以写成这样if(node && node.kids && node.kids[index]){foo(node.kids[index]);}//当然也可以这样var kid = node && node.kids && node.kids[index];if(kid){foo(kid);}//是不是有人想到了||的写法?(jslint禁止写法)node && node.kids && node.kids[index] && foo(node.kids[index]);//使用&&操作符,前项为true时执行后项,不推荐使用(jslint禁止写法)$(this).hacClass("on") && $(this).removeClass("on");
join() 构建字符串通常构建字符串的方式是这样的:
function listHtml(items){var html = '<div class="foo">';for(var i = 0; i < items.length; i++){html += itemHtml(items[i]);}html += '</div>';return html;};
以上代码在IE中效率很低,better than better的写法是:
function listHtml(items){var html = [];for(var i = 0; i < items.length; i++){//html.push(itemHtml(items[i])); 速度稍微慢一点html[i] = itemHtml(items[i]);}return '<div class="foo">' + html.join("") + '</div>';};