深入理解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。
章节名: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系列(19):求值策略
- 深入理解javascript原型和闭包
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
- 深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
- 谈谈我对JavaScript中typeof和instanceof的深入理解
- 深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP
- 深入理解JavaScript系列(49):Function模式(上篇)
- 深入理解JavaScript系列(38):设计模式之职责链模式
- 深入理解JavaScript系列(45):代码复用模式(避免篇)
- 深入理解javascript原型和闭包(3)——prototype原型
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(10)——this
- 深入理解JavaScript系列(50):Function模式(下篇)
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
- 深入理解JavaScript系列(35):设计模式之迭代器模式
- <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式
- 深入理解JavaScript内部原理(1): 执行上下文
- 深入理解JavaScript系列(36):设计模式之中介者模式