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

原创 2013年12月02日 21:29:12

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

  • 章节名:2.6.1 条件语句
  • 页码:第23页 2013-12-02 17:05:23
别忘了,单个等号(=)是用于完成赋值操作的。如果你在条件语句的某个条件里使用了单个等号,那么只要相应的赋值取得成功,那个条件的求值结果就将是true。
我觉得作者在这里对赋值运算的细节做了简化,虽然给出的代码确实如其所说,但对于原因的表述却是错误的。
根据犀牛书,page81页,
“=”运算希望它的左操作数是一个左值:一个变量或者对象属性(或数组元素)。它的右操作数可以是任意类型的任意值。赋值表达式的值就是右操作数的值。
下面来讲讲细节。在控制台运行下面代码:
  1. var a;
  2. console.log(a=10); // => 输出 10
  3. if(a=20){
  4. console.log('ok');
  5. } // => 输出 ok
第一个输出的是10,因为该赋值操作的右操作数是一个Number直接量,于是赋值表达式的值就是10.
第二个输出结果是ok,是因为条件表达式发生了两件事:
1)运行赋值表达式,整个表达式的值为20
2)类型转换,将数值类型 20 转换为 布尔类型,结果为 true
于是运行该条件语句。
而不是像作者说的“只要相应的赋值操作取得成功,那个条件的求值结果就将是true”。
例如:
  1. var a;
  2. if(a=0){
  3. console.log('ok');
  4. }else{
  5. console.log('shit');
  6. } // => 输出 shit
这里赋值运算成功了,运行的条件分支却是else。

C/C++__基础类型的(=)赋值表达式的返回值

今天遇到了一段代码对赋值运算符之后的表达式进行判断,由于之前没接触过类似的代码,特此记录。 if ((pTmpBuf = pBuf) != NULL) 结论:  C/C++中 (A = B)...
  • u010003835
  • u010003835
  • 2015年09月17日 11:42
  • 2072

C语言表达式和表达式的值

今天突然发现如果能很好的理解表达式
  • dscyw
  • dscyw
  • 2014年05月14日 19:11
  • 2666

如何在外部JS中使用EL表达式或者c标签产生的值

为了维护方便,一般是将大量的javascript单独写在一个js文件中,但问题是,许多js文件中使用了EL表达式,如何获取它们的值?在网络上搜寻了下资料,经过验证如下 1、在原JSP页面中将...
  • freewindgo
  • freewindgo
  • 2016年06月22日 10:38
  • 5225

深入理解Javascript: 立即调用的函数表达式

前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完...
  • oXiaoHe12345
  • oXiaoHe12345
  • 2015年08月01日 08:48
  • 236

深入理解Javascript系列————立即调用的函数表达式

前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫...
  • sq_201067
  • sq_201067
  • 2013年03月11日 22:20
  • 317

深入理解JavaScript系列(4):立即调用的函数表达式

前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一...
  • mr_orange_klj
  • mr_orange_klj
  • 2016年12月14日 20:40
  • 102

深入理解JavaScript系列(2):揭秘命名函数表达式

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点。 简单的说...
  • u010077237
  • u010077237
  • 2014年03月31日 00:22
  • 561

深入理解JavaScript系列(2):揭秘命名函数表达式

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点。 简单的说,命名函...
  • u013239111
  • u013239111
  • 2014年03月26日 09:31
  • 626

深入理解JavaScript系列(4):立即调用的函数表达式

大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行...
  • marcelwu
  • marcelwu
  • 2016年12月08日 11:57
  • 82

深入理解JavaScript系列 ----(2):揭秘命名函数表达式

揭秘命名函数表达式 1、
  • xingxing1828
  • xingxing1828
  • 2014年06月06日 15:46
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解JavaScript赋值表达式(一)
举报原因:
原因补充:

(最多只允许输入30个字)