建议8:谨慎使用运算符(3)
要确保变量a的值为连续运算,可以使用小括号逻辑分隔符强迫4个数值先进行连续运算,然后再赋值。

  1. a = (1, 2, 3, 4);
  2. alert(a); //4
    当使用var关键字来定义变量时,会发现a最终没有返回值。
  3. var a = 1, 2, 3, 4;
  4. alert(a); //null
    要确保var声明的变量正确返回连续运算的值,需要使用小括号先强迫数值进行计算,最后再把连续运算的值赋值给变量a。
  5. var a = (1, 2, 3, 4);
  6. alert(a); //4
    4.警惕运算符的副作用

JavaScript运算符一般不会对运算数本身产生影响,如算术运算符、比较运算符、条件运算符、取逆、“位与”等。例如,a = b + c,其中的运算数b和c不会因为加法运算而导致自身的值发生变化。
但在JavaScript中还有一些运算符能够改变运算数自身的值,如赋值、递增、递减运算等。由于这类运算符自身的值会发生变化,在使用时会具有一定的副作用,特别是在复杂表达式中,这种副作用更加明显,因此在使用时应该时刻保持警惕。例如,在下面代码中,变量a经过赋值运算和递加运算后,其值发生了两次变化。

  1. var a;
  2. a = 0;
  3. a++;
  4. alert(a); //1
    再如:
  5. var a;
  6. a = 1;
  7. a = (a++)+(++a)-(a++)-(++a);
  8. alert(a); //-4
    如果直观地去判断,会错误地认为返回值为0,实际上变量a在参与运算的过程中,变量a的值是不断发生变化的。这种变化很容易被误解。为了方便理解,进一步拆解(a++)+(++a)–(a++)–(++a)表达式:
  9. var a;
  10. a = 1;
  11. b = a++;
  12. c = ++a;
  13. d = a++;
  14. e = ++a;
  15. alert(b+c-d-e); //-4
    如果表达式中还包含其他能够引起自身值发生变化的运算,那么整个表达式的逻辑就无法用人的直观思维来描述了。因此,从代码可读性角度来考量:在一个表达式中不能够对相同操作数执行两次或多次引起自身值变化的运算,除非表达式必须这样执行,否则应该避免产生歧义。这种歧义在不同编译器中会产生完全不同的解析结果。例如,下面的代码虽然看起来让人头疼,但由于每个运算数仅执行了一次引起自身值变化的运算,所以不会产生歧义。
  16. a = (b++)+(++c)-(d++)-(++e);

JS编程建议——8:谨慎使用运算符(3)相关推荐

  1. JS编程建议——42:用好正则表达式静态值

    建议42:用好正则表达式静态值 正则表达式的静态属性比较特殊,有两个名字:长名(全称)和短名(简称,以美元符号开头表示),详细说明见表2.1. 表2.1 RegExp的静态属性 长名 短名 说明 in ...

  2. JS编程建议——2:正确辨析JavaScript句法中的词、句和段

    建议2:正确辨析JavaScript句法中的词.句和段 JavaScript语法包含了合法的JavaScript代码的所有规则和特征,它主要分为词法和句法.词法包括字符编码.名词规则.特殊词规则等.词 ...

  3. JS编程建议——52:建议使用splice删除数组

    建议52:建议使用splice删除数组 删除数组元素的方法有多种,最简单的方法是利用length属性来截断数组,但这种方法比较笨拙,仅能够截断尾部元素.在JavaScript中,由于数组其实就是对象, ...

  4. JS编程建议——37:推荐使用replace(1)

    建议37:推荐使用replace(1) String对象的replace方法包含两个参数,第一个参数表示执行匹配的正则表达式,也可以传递字符串,第二个参数表示准备代替匹配的子字符串,例如,把字符串ht ...

  5. JS编程建议——7:小心保留字的误用

    建议7:小心保留字的误用 JavaScript语言中定义了很多备用或已经使用的保留字,按首字母顺序列出的保留字. 这些单词中的大多数并没有在语言中使用,但是根据JavaScript语法规则,这些单词是 ...

  6. JS编程建议——32:使用制表

    建议32:使用制表 代码所做的事情越少,它的运行速度就越快,因此,避免重复工作很有意义.多次执行相同的任务也在浪费时间.制表法通过缓存先前计算结果为后续计算所使用,避免了重复工作,这使得制表成为递归算 ...

  7. python3代码编程规范(命名、空格、注释、代码布局、编程建议等)

    在日常工作中,编写python代码时,大家有可能因为IDE的不同或者是没有遵循python的pep8规范而导致每个人的格式都不尽相同,导致其他人阅读起来比较吃力.但是有时候代码规范也并不是建议使用的, ...

  8. 前端利器—1—转型JS编程

    JS作为前端开发的必备语言工具,虽然JS对非编程人员来说比较容易上手,但是,要真正的精通JS开发,尚且假设学习过c++.java等面向对象语言的一种.因为对oo开发人员,迅速掌握JS的开发要点,是顺利 ...

  9. C++最佳实践之编程建议

    本文介绍C++的编程建议基于C++之父Bjarne Stroustrup编写的<A Tour of C++>,包括通用指南.命名空间.异常处理.成员函数.虚函数.构造函数.模板.容器.st ...

最新文章

  1. 2022-2028年中国汽车内饰行业市场需求与投资规划分析报告
  2. 【No.5 类型转换导致的错误】
  3. java swing 获取text_如何在Java Swing中将文本文件读入jtextarea
  4. opencv图像和二维数组相互转换
  5. 【Python面试】 说说Python可变与不可变数据类型?
  6. 字符串匹配--Sunday算法
  7. softmax logistic loss详解
  8. java日历类add方法_Java日历computeFields()方法及示例
  9. 自制操作系统-使用汇编显示 hello world
  10. 经纬度距离计算小工具_造价算量慢?70个造价史上最实用小工具和计算表格,速领...
  11. 【CCNA题库】Ti CCNA640-802V30版题库
  12. 如何将本地应用制作成docker镜像
  13. pip镜像网站及使用方法
  14. 【Zookeeper面试篇】什么是羊群效应,公平锁怎么实现
  15. 思成五笔的通俗易懂讲解
  16. 【Touch】触摸事件onTouch
  17. 【YAML】【YAML的实践】【YAML的使用学习记录】
  18. php获取证书编号没有serialNumberHex只有serialNumber处理方法
  19. python运维工程师前景及待遇_【运维工程师就业前景】百度2020年运维工程师待遇怎么样-看准网...
  20. UI控件之开关按钮(ToggleButton与Switch)

热门文章

  1. Android性能系列-渲染篇
  2. 关于Arrays类总结
  3. php include效率分析
  4. OpenGL学习入门之VS2010环境配置 [转]
  5. 配置ISA Server 2006 ×××使用户轻松连接内网
  6. dubbo官方文档中文_Pandas中文官方文档:基础用法5
  7. 8.0强行转换后变成了7_【自学C#】|| 笔记 12 数据类型转换
  8. apollo mqtt linux qt,MQTT第5版更新,以及如何应用到Qt MQTT模块中
  9. android 按钮 叠加,android - 叠加层按钮在Android 4.3中不起作用 - 堆栈内存溢出
  10. autosar架构详细介绍_【技术】基于AUTOSAR的电机驱动系统分析