您的位置:首页 > Web前端 > JavaScript

深入理解JavaScript赋值表达式(一)

2013-12-02 21:29 239 查看
在读《JavaScript DOM编程艺术》时发现一个错误,顺便就稍微研究了一下JS的赋值表达式返回值问题。原本写在豆瓣读书笔记里,摘过来跟大家分享下。 http://book.douban.com/annotation/29593293/

章节名:2.6.1 条件语句
页码:第23页 2013-12-02 17:05:23

别忘了,单个等号(=)是用于完成赋值操作的。如果你在条件语句的某个条件里使用了单个等号,那么只要相应的赋值取得成功,那个条件的求值结果就将是true。
我觉得作者在这里对赋值运算的细节做了简化,虽然给出的代码确实如其所说,但对于原因的表述却是错误的。根据犀牛书,page81页,
“=”运算希望它的左操作数是一个左值:一个变量或者对象属性(或数组元素)。它的右操作数可以是任意类型的任意值。赋值表达式的值就是右操作数的值。下面来讲讲细节。在控制台运行下面代码:
var a;
console.log(a=10); // => 输出 10
if(a=20){
console.log('ok');
} // => 输出 ok
第一个输出的是10,因为该赋值操作的右操作数是一个Number直接量,于是赋值表达式的值就是10.第二个输出结果是ok,是因为条件表达式发生了两件事:1)运行赋值表达式,整个表达式的值为202)类型转换,将数值类型 20 转换为 布尔类型,结果为 true于是运行该条件语句。而不是像作者说的“只要相应的赋值操作取得成功,那个条件的求值结果就将是true”。例如:
var a;
if(a=0){
console.log('ok');
}else{
console.log('shit');
} // => 输出 shit
这里赋值运算成功了,运行的条件分支却是else。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript