// 递增递减运算符
// ++ --
// 作用:
// 每次执行,会在存储的原始数值基础上,自增 或者 自减 1
// 语法形式
// 前缀语法形式 ++变量 --变量
// 在当前位置先执行自增或者自减操作
// 将执行完自增自减效果的新的数据数值,参与到程序的执行中
// 后缀语法形式 变量++ 变量--
// 在当前位置,先使用原始数据参与执行的执行
// 程序执行结束之后,在下一个位置上,使用自增自减之后,新的数据,参数程序的执行
// 当前位置是原始数据参与执行
// var int1 = 100;
// var int2 = 200;
// 前缀语法
// 在当前位置,先执行自增或者自减操作
// 在int1存储原始数据100的基础上,自增1,结果是101
// 使用 新的 数据101 参与程序的执行,因此,输出的自增之后的新数据101
// console.log( ++int1 );
// 后缀语法
// 先使用原始数据参与程序的执行
// 先使用原始数据,200,参与console.log()的执行
// 此时 console.log() 输出的是原始数值200
// 当前位置程序执行结束之后,下一个位置,会使用自增之后的数值201参与程序的执行
// 执行后缀的当前位置,执行数据是原始数据
// console.log( int2++ );
// 当前位置是int2++后 , 下一个位置 , 这个位置上,int2是201
// 执行后缀语法的下一个位置,int2存储数据是执行后缀++效果之后的数据
// console.log(int2);
// 经典的面试题
// var int = 0 ;
// // 后缀语法,当前位置是使用原始数据参与程序的执行
// // 原始数据是 0
// // 此时 赋值给 res 的数值 就是 0
// // 输出 res 中存储数据的结果,就是0
// var res = int++;
// console.log(res);
// var int = 0;
// 前缀语法,先执行自增操作,int存储的数据从原始数据0,自增为数值1
// 再执行赋值操作,将int存储的新数据,1赋值给变量res
// 输出res,就是存储的数据1
// var res = ++int;
// console.log(res);
// 小总结
// 不管是前缀,还是后缀,只要是执行,一定会自增或者自减 1
// 前缀是先执行自增自减操作,再执行其他操作
// 后缀是先执行其他操作,再执行自增自减操作
// 经典面试题
var int = 0;
console.log(int++);
console.log(++int);
console.log(int++);
console.log(++int);
console.log(int++);
console.log(int);
// 最后一个执行++或者--的单元 这里叫当前位置
// 之后的位置,都是自增或者自减程序执行的下一个位置
// 那么不管前缀还是后缀,都会体现 ++ 或者 -- 执行结果之后的数据内容
// 不管之前有前缀还是后缀
// 当前console.log()程序执行的位置,是在下一个单元
// 这里已经是下一个位置了
console.log(int); // 一定是 5
// 经典面试题
var int1 = 0;
// 原始数值 0 1 2 3
// 前缀/后缀 后缀 前缀 前缀 后缀
// 参与运算的数值 0 + 2 + 3 + 3
// 当前位置后的数值 1 2 3 4
var res1 = int1++ + ++int1 + ++int1 + int1++ ;
console.log(int1); // 4
console.log(res1); // 8
var int2 = 0;
// 原始数值 0 1 2 3 4 3
// 前缀/后缀 后缀 前缀 后缀 前缀 后缀 前缀
// 参与运算的数值 0 + 2 - 2 - 4 + 4 + 2
// 当前位置后的数值 1 2 3 4 3 2
// +号,-号,不影响int2的数值
// 只是 ++ 和 -- 符号 影响 int2 的数值
// 有一个 ++ int2 就+1 有一个 -- int2 就-1
var res2 = int2++ + ++int2 - int2++ - ++int2 + int2-- + --int2;
console.log(int2); // 2
console.log(res2); // 2
// 总结
// 有一个 ++ 就+1 有一个-- 就-1,是执行 自增自减的变量 改变1
// 前缀,就是先 改变,用新的数值,参与运算
// 和后缀就是, 先参与运算, 之后下一个位置上,再改变为新的数值
// 运算中的 + 加号 或者 - 减号 影响的是 res 变量的结果,跟执行自增自减的int数值无关
var int3 = 0;
// 计算res3
// 原始数值 0 1 2 1 0
// 前缀/后缀 前缀 后缀 后缀 前缀 后缀
// 参与运算的数值 1 - 1 + 2 - 0 + 0
// 当前位置后的数值 1 2 1 0 1
var res3 = ++int3 - int3++ + int3-- - --int3 + int3++;
// 计算 int3 的时候, 不要看 加号 减号,就把int3,单独拿出来看
// ++int3 int3++ int3-- --int3 int3++
// 0 +1 +1 -1 -1 +1 --- 1 int3就是1
console.log(int3); // 1
console.log(res3); // 2
// 总结:
// 1, 变量的 ++ 或者 -- 没执行一次,变量存储的数据就会相应的 +1 或者 -1
// var int = 0 ; int++ 数据+1 int-- 数据-1 --int 数据-1 int-- 数据-1
// 最终 int 存储的数据会变为 -2
// 2, 不管是前缀还是后缀,变量存储的数据,最终都是要发生改变的
// 3, 前缀是当前位置就发生改变,改变后的新数值,参与程序的执行
// 后缀是下一个位置发生改变,当前位置是原始数据参与程序的执行
var a = 1.123;
a++;
a++;
a++;
a++;
console.log(a);
// 布尔类型 true 转化为数值1 然后执行 自增自减操作
var b = true;
b++;
b++;
b++;
b++;
console.log(b);
// 布尔类型 false 转化为数值0 然后执行 自增自减操作
var c = false;
c++;
console.log(c);
// 字符串是纯数字字符串,也可以执行++或者--操作
var d = '123';
d++;
console.log(d);
// 不符合数字规范的字符串,执行++或者--,结果是NaN
var e = '北京';
e++;
console.log(e);