上QQ阅读APP看书,第一时间看更新
5.6 赋值运算符
赋值是一种运算,但习惯上,把赋值独立成行,故称之为赋值语句。
var a, b; //定义变量 a=null; //给变量赋值 b=undefined; //给变量赋值
赋值运算符的左侧运算数必须是变量、对象属性或数组元素。
【示例1】下面的写法是不对的,因为左侧的值是一个直接量,是不允许操作的。
1=100; //返回错误
JavaScript提供了两种类型的赋值运算符:简单赋值运算符(=)和附加操作的赋值运算符。
简单的赋值运算符,就是把右侧的运算数的值直接复制给左侧变量。
附加操作的赋值运算符,就是赋值之前还要对右侧运算数执行某种操作,然后再复制,详细说明如表5-9所示。
表5-9 附加操作赋值运算符
【示例2】由于赋值运算符可以参与表达式运算,用户可以设计很多复杂的赋值操作,如连续赋值表达式。
var a=b=c=d=e=f=100; //连接赋值
由于赋值运算符是从右向左进行计算,所以连续赋值运算并不会发生错误。
在条件表达式中进行赋值:
for(var a=1, b=10; a<b; a++){ //在条件表达式中进行赋值操作 alert(a); }
【示例3】在下面这个复杂的表达式中,逻辑与左侧的运算数是一个赋值表达式,右侧的运算数也是一个赋值表达式。但左侧仅是一个简单的数值赋值,而右侧的是把一个函数对象赋值给变量b。在逻辑与运算中,左侧的赋值并没有真正的复制给变量a,当逻辑与运算执行右侧的表达式时,该表达式是把一个函数赋值给变量b,然后利用小括号运算符调用这个函数,返回变量a的值,结果并没有返回变量a的值为6,而是undefined。
var a; //定义变量a alert(a=6&&(b=function(){ //逻辑与运算表达式 return a; //返回变量a的值 })() ); //结果返回undefined
由于赋值运算作为表达式使用具有副作用,即它能够改变变量的值。因此在使用时要慎重,确保不要引发潜在的危险。经过上面示例代码,可以看到赋值运算符参与表达式运算时给变量a带来了不可预测的返回值。因此,对于上面表达式,更安全的写法是:
var a=6; //定义并初始化变量a b=function(){ //定义函数对象b return a; } alert(a&&b()); //利用逻辑与运算,根据a的逻辑值,决定是否调用函数b