javascript “||”、“&&”的灵活运用

你是否看到过这样的代码:a=a||""; 可能javascript初学者会对此感到茫然。今天就跟你们分享一下个人一些心得。 javascript

其实: java

a=a||"defaultValue";
与:
if(!a){
  a="defaultValue";
}
和:
if(a==null||a==""||a==undefined){
    a="defaultValue";
}

是等价的! 算法

为了弄清这个问题,首先咱们必须了解一个问题:javascript中数据类型在转换为bool类型时发生了什么。 spa

 

在javascript中,数据类型能够分为“真值”和“假值”。顾名思义,真值转换为bool时值为true;假值转换为bool时值为false。下表罗列了一些常见的数据类型转换为bool时的值: code

 

数据类型 转换为bool后的值
null FALSE
undefined FALSE
Object TRUE
function TRUE
0 FALSE
1 TRUE
0、1以外的数字 TRUE
字符串 TRUE
""(空字符串) FALSE

在if表达式中,javascript首先将条件表达式转换为bool类型,表达式为真值则执行if中的逻辑,不然跳过。 ip

 

因而有了: 字符串

if(!a){
    a="defaultValue";
}

下面咱们再来看“&&”、“||”两个表达式。 io

因为javascript是弱类型语言,因此在javascript中这两个表达式可能跟其余语言(好比java)中不太同样。 table

在javascript中,“&&”运算符运算法则以下: function

若是&&左侧表达式的值为真值,则返回右侧表达式的值;不然返回左侧表达式的值。

这就是说:

var i=""&&"真值";//->i=""
i="真值"&&"其余真值";//->i="其余真值"
i="真值"&&"";//->i=""

“||”运算符的运算法则以下:

若是||左侧表达式的值为真值,则返回左侧表达式的值;不然返回右侧表达式的值。

这就是说:

var i=""||"真值";//->i="真值"
i="真值"||"其余真值";//->i="真值"
i="真值"||"";//->i="真值"
因而,就能够理解:
a=a||"defaultValue";

的逻辑了。若是a为假值(等于null、空字符串……),则将"defaultValue"赋给a;不然将a的值赋给a自己。

下面咱们运用||、&&来简化程序:

var parameter="";
function test(parameter){
	//return 真值
	return true;
}

//真值操做
function operate1(parameter){
	return "真值操做";
}

//假值操做
function operate2(parameter){
	return "假值操做";
}

var result=test(parameter)&&operate1(parameter);
result=test(parameter)||operate2(parameter);

//等价于
result=test(parameter)?operate1(parameter):operate2(parameter);

alert(result);//真值操做

//也等价于
if(test(parameter)){
	result=operate1(parameter);
}else{
	result=operate2(parameter);
}

alert(result)//真值操做
相关文章
相关标签/搜索