javascript精雕细琢(二):++、--那点事
目录
- 引言
- ++和--在数学运算中的计算规则
- ++和--在变量引用时的计算规则
- ++和--的数据转换应用
引言
对于接触JS时间不长的前端来说,刚开始要实现诸如轮播图,选项卡等小模块时,肯定会用到index索引来实现。而这其中很大一部分又会使用++(自加)、--(自减),所以清楚的知道++(自加)、--(自减)的计算模式,可以在运用时减少错误。本文将从数学运算、变量引用、数据转换3个方面,对++(自加)、--(自减)进行一个详细的说明,力求达到一个在通读全文后,明确++(自加)、--(自减)应用方式的效果。
一、++和--在数学运算中的计算规则
老规矩,先上代码
let a = 1,
b = 1;
let num1 = a++ + b++, //num1执行前a=1,b=1,num1执行后a=2,b=2
num2 = a++ + ++b, //num2执行前a=2,b=2,num2执行完后a=3,b=3
num3 = ++a + b++, //num3执行前a=3,b=3,num3执行完后a=4,b=4
num4 = ++a + ++b; //num4执行前a=4,b=4,num4执行完后a=5,b=5
console.log(num1); //结果为2,步骤分解: a + b(1 + 1)=> a++(2) => b++(2) => a=2,b=2;
console.log(num2); //结果为5,步骤分解: a + (++b)(2 + 3) => a++(3) => a=3,b=3;
console.log(num3); //结果为7,步骤分解: (++a) + b(4 + 3) => b++(4) => a=4,b=4;
console.log(num4); //结果为10,步骤分解: (++a) + (++b)(5 + 5) => a=5,b=5;
通过以上代码,可以总结出++和--在数学运算出的计算规则如下(加减乘除没区别):
1)当++、--写在变量前时,数学计算时,引用的是++、--未执行的变量值;
2)当++、--写在变量后时,数学计算时,引用的是++、--执行后的变量值;
通过以上的理解,就不难看出,num1得到的求和结果实际上就是a + b,而num2实际上是a + (++b),num3是(++a) + b,num4是(++a) + (++b),但是求和归求和,++、--只是没在求和结果中执行,实际上变量的++、--都是执行了的,这一点要明确。
二、++和--在变量引用时的计算规则
上代码
let num1 = 0,
num2 = 0;
let arr = [0, 1, 2, 3, 4, 5, 6];
console.log(arr[num1++]); // 0 num1=1
console.log(arr[++num2]) // 1 num2=1
通过以上代码,不难看出,当在变量引用时执行++、--,与数学运算有相似的规律。总结起来就是一句话——++、--在变量前,引用++、--执行后的变量值;++、--在变量后,引用当前变量值(即执行++、--前的值)。
三、++和--的数据转换应用
上代码
let a = true;
let b = false;
let c = "a";
console.log(++a); //
console.log(b++); //
console.log(c++); //NaN
一句话总结——对非Number类型的数据,应用++、--,相当于执行了Number()方法。如果转换后是number类型,则按上边的规则执行++和--,如果转换后不是number类型,则不执行++和--。输出NaN。不能直接进行类似++true的操作,必须通过声明变量值为true或false,然后再++、--。
javascript精雕细琢(二):++、--那点事的更多相关文章
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 初探JavaScript(二)——JS如何动态操控HTML
除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次 ...
- 从头开始学JavaScript (十二)——Array类型
原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimjs/qrcodejs DIV <div id="qrco ...
- 同事问如何判断同花顺,我用javascript的二维数组写了个简易demo
有个前同事在群里问如何判断是否为同花顺我用javascript的二维数组写了个简易demo. <!DOCTYPE html> <html> <body> <s ...
- 2、JavaScript 基础二 (从零学习JavaScript)
11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...
- Javascript面向对象二
Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...
- QrCode C#生成二维码 及JavaScript生成二维码
一 C#的二维码 示例: class Program { static void Main(string[] args) { QrEncoder qrEncoder = new QrEncode ...
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 设计模式(二)
JavaScript 设计模式(二) 本篇文章是 JavaScript 设计模式的第二篇文章,如果没有看过我上篇文章的读者,可以先看完 上篇文章 后再看这篇文章,当然两篇文章并没有过多的依赖性. 5. ...
随机推荐
- 第五次作业+4505B寝室队
1.需求分析: 作一个简单的MP3播放器,并能显示播放文件的路径. 2.设计思路: 用窗体设计播放器的界面,以市面上主流的播放器为标准,采用一个窗体的界面. 3.实现的功能: 第一是能播放MP3文件, ...
- vm的三种网络模式
Vm网卡的模式:网络地址转换模式(nat),仅主机(host-only),桥接模式(Brideged) VMware 的几个虚拟设备: ■ VMnet0:这是 VMware 用于虚拟桥接网络下的虚拟交 ...
- web安全测试系统
最近写了个简单的web安全实践系统部署到了docker中 下载方式:docker pull ju5ton1y/websecurity github Dockerfile下载地址:https://git ...
- python调用docker API(CentOS6.5)
一 环境背景 python-2.7.8 docker 版本 1.15 (*yum安装为1.14版本,需升级为1.15,详见后续步骤) 二 获取Docker容器指标[指标可行性分析见笔记:] CPU : ...
- mybaits入门(含实例教程和源码) http://blog.csdn.net/u013142781/article/details/50388204
前言:mybatis是一个非常优秀的存储过程和高级映射的优秀持久层框架.大大简化了,数据库操作中的常用操作.下面将介绍mybatis的一些概念和在eclipse上的实际项目搭建使用. 一.mybati ...
- java异常处理-finally中使用return和throw语句
java异常语句中的finally块通常用来做资源释放操作,如关闭文件.关闭网络连接.关闭数据库连接等.正常情况下finally语句中不应该使用return语句也不应该抛出异常,以下讨论仅限于java ...
- python对excel操作
学习一下:原文链接:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 一.安装xlrd模块 到python官网下载http:/ ...
- 模板:插头dp
前言: 严格来讲有关dp的都不应该叫做模板,因为dp太活了,但是一是为了整理插头dp的知识,二是插头dp有良好的套路性,所以姑且还叫做模板吧. 这里先推荐一波CDQ的论文和这篇博客http://www ...
- Climbing Stairs - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Climbing Stairs - LeetCode 注意点 注意边界条件 解法 解法一:这道题是一题非常经典的DP题(拥有非常明显的重叠子结构).爬到n ...
- Linux内核分析实验五
一.给MenuOS增加time和time-asm命令 1. 克隆并自动编译MenuOS rm menu -rf 强制删除原menu文件 git clone http: cd menumake root ...