运算符和表达式
2016-03-02 23:20
190 查看
2. ****运算符和表达式
程序: 人的*想法*在计算机中的执行
运算符: 程序中模拟人的想法的符号
表达式: 由数据,变量和运算符组成的一个公式
每个表达式都完成一项专门的运算任务
***每个表达式几乎都有返回值
1. 算数运算: + - * / %
隐式转换: 默认都转为数字,再运算
如果无法转为数字,则转为NaN
如果NaN参数任何算数计算,结果仍然为NaN
特殊: +运算中,只要碰上字符串,就都转为字符串。+运算变为字符串拼接。
%: m%n 表示m/n,不取商,而取除不尽的余数部分
何时使用: 1. 判断能否被整除
2. 控制一个运算的结果,不能超过指定值
因为模运算的结果,不可能超过除数
2. 关系运算: 做比较
包括: > < >= <= == !=
只返回true、false
隐式转换: 默认一切都转为数字,再比较大小
特殊: 1. 如果参与比较的两值都是字符串
会按位PK每个字符的unicode号
直到比出结果为止
2. NaN不大于,不小于,不等于任何值
NaN和任何值做> < ==比较都返回false
NaN和任何值做!=比较返回true
结果: 无法用普通的关系运算,判断一个数据是否是NaN
解决: var bool=isNaN(num)
本意用来检测num是不是NaN
如果num是NaN就返回true,否则返回false
经常反用: 用来检测num是不是数字或能否被隐式转为数字。
比如: var bool=!isNaN(num)
用来检测num是不是数字
如果num是数字,就返回true
否则返回false。
3. null和undefined: null==undefined -> true
如何解决:
全等: === 类型相同且数值相同
其实就是不带隐式转换的==
function String(x){
//如果x是null,就返回"null"
if(x===null){ return "null"; }
//否则,如果x是undefined,就返回"undefined"
else if(x===undefined){return "undefined"}
//否则
else{ return x.toString(); }
}
3.逻辑运算: 将多个关系运算综合得出最终结论
返回值: 逻辑运算作为条件使用时,都返回true,false
包括: &&(而且) ||(或) !(不)
其中: &&: 只有两个条件都为true,结果才为true
只要一个条件为false,结果就为false
||: 只要一个条件为true,结果就为true
只有两个条件都为false,结果才为false
!: 颠倒任意bool值:!true->false !false->true
隐式转换: 默认将每个关系运算都转为bool再综合比较
***短路逻辑: 只要前一个条件已经可以得出最终结论,则后续条件不再执行!
&&: 如果前一个条件为true,时后一个条件才执行
如果前一个条件为false,则后一个条件不执行
固定套路: 实现简单分支:
1个条件,1件事,满足条件才执行,不满足就不执行
公式: 条件&&操作;
比如: //如果total>500,才打八折
if(total>500){total=total*0.8}
也可写成: total>500&&(total=total*0.8);
||: 如果前一个条件为true,则后一个条件不执行
如果前一个条件为false,则判断后一个条件
固定套路: 实现两个值二选一使用——备选值
4.位运算:
左移和右移:
m<<n: 读作m左移n位,相当于:m* 2的n次方
m>>n: 读作m右移n位,相当于: m/ 2的n次方
m>>>0: 取整
5.扩展赋值运算: 一句话执行两个操作: 运算,再保存回去
+= -= *= /= %=
何时使用: 只要取出变量的值做计算,之后还要再保存回去时,就要用扩展赋值运算简写。
比如: total=total*0.8; => total*=0.8;
m+=n; => m=m+n; 累加
m*=n; => m=m*n; 累乘
递增,递减运算: ++ --
i++ => i+=1 => i=i+1
i-- => i-=1 => i=i-1
递增 vs 累加:
如果每次固定增1,才用递增,否则,用累加
****递增/减,单独使用,放前放后都一样
递增/减,参与其他表达式中时: 变量中的值都会被+1
前++,返回递增后的*新*值
后++,返回递增前的*旧*值
鄙视题:
var n=2;
var r=n++ + ++n + n++;
? ? ?
//或 var r=++n + n++ + ++n;
console.log(r);
//?
提示:所有表达式,默认从左向右执行
优先级高的先执行 ++的优先级 高于 +
逻辑运算符的案例:
<script>
var H=180,D=218,B=true;
var H=180,D=2,B=false;
var H=155,D=2,B=false;
console.log("嘉宾1:"+(H>178&&D>1&&B==true));
console.log("嘉宾2:"+(H>178||D>1||B==true));
console.log("嘉宾3:"+(H>155||D>1||B==false));
</script>
短路逻辑的案例:
<script>
/*短路逻辑||*/
var comment=prompt("请输入评论");
console.log(comment||"主人很懒,什么也没留下");
</script>
程序: 人的*想法*在计算机中的执行
运算符: 程序中模拟人的想法的符号
表达式: 由数据,变量和运算符组成的一个公式
每个表达式都完成一项专门的运算任务
***每个表达式几乎都有返回值
1. 算数运算: + - * / %
隐式转换: 默认都转为数字,再运算
如果无法转为数字,则转为NaN
如果NaN参数任何算数计算,结果仍然为NaN
特殊: +运算中,只要碰上字符串,就都转为字符串。+运算变为字符串拼接。
%: m%n 表示m/n,不取商,而取除不尽的余数部分
何时使用: 1. 判断能否被整除
2. 控制一个运算的结果,不能超过指定值
因为模运算的结果,不可能超过除数
2. 关系运算: 做比较
包括: > < >= <= == !=
只返回true、false
隐式转换: 默认一切都转为数字,再比较大小
特殊: 1. 如果参与比较的两值都是字符串
会按位PK每个字符的unicode号
直到比出结果为止
2. NaN不大于,不小于,不等于任何值
NaN和任何值做> < ==比较都返回false
NaN和任何值做!=比较返回true
结果: 无法用普通的关系运算,判断一个数据是否是NaN
解决: var bool=isNaN(num)
本意用来检测num是不是NaN
如果num是NaN就返回true,否则返回false
经常反用: 用来检测num是不是数字或能否被隐式转为数字。
比如: var bool=!isNaN(num)
用来检测num是不是数字
如果num是数字,就返回true
否则返回false。
3. null和undefined: null==undefined -> true
如何解决:
全等: === 类型相同且数值相同
其实就是不带隐式转换的==
function String(x){
//如果x是null,就返回"null"
if(x===null){ return "null"; }
//否则,如果x是undefined,就返回"undefined"
else if(x===undefined){return "undefined"}
//否则
else{ return x.toString(); }
}
3.逻辑运算: 将多个关系运算综合得出最终结论
返回值: 逻辑运算作为条件使用时,都返回true,false
包括: &&(而且) ||(或) !(不)
其中: &&: 只有两个条件都为true,结果才为true
只要一个条件为false,结果就为false
||: 只要一个条件为true,结果就为true
只有两个条件都为false,结果才为false
!: 颠倒任意bool值:!true->false !false->true
隐式转换: 默认将每个关系运算都转为bool再综合比较
***短路逻辑: 只要前一个条件已经可以得出最终结论,则后续条件不再执行!
&&: 如果前一个条件为true,时后一个条件才执行
如果前一个条件为false,则后一个条件不执行
固定套路: 实现简单分支:
1个条件,1件事,满足条件才执行,不满足就不执行
公式: 条件&&操作;
比如: //如果total>500,才打八折
if(total>500){total=total*0.8}
也可写成: total>500&&(total=total*0.8);
||: 如果前一个条件为true,则后一个条件不执行
如果前一个条件为false,则判断后一个条件
固定套路: 实现两个值二选一使用——备选值
4.位运算:
左移和右移:
m<<n: 读作m左移n位,相当于:m* 2的n次方
m>>n: 读作m右移n位,相当于: m/ 2的n次方
m>>>0: 取整
5.扩展赋值运算: 一句话执行两个操作: 运算,再保存回去
+= -= *= /= %=
何时使用: 只要取出变量的值做计算,之后还要再保存回去时,就要用扩展赋值运算简写。
比如: total=total*0.8; => total*=0.8;
m+=n; => m=m+n; 累加
m*=n; => m=m*n; 累乘
递增,递减运算: ++ --
i++ => i+=1 => i=i+1
i-- => i-=1 => i=i-1
递增 vs 累加:
如果每次固定增1,才用递增,否则,用累加
****递增/减,单独使用,放前放后都一样
递增/减,参与其他表达式中时: 变量中的值都会被+1
前++,返回递增后的*新*值
后++,返回递增前的*旧*值
鄙视题:
var n=2;
var r=n++ + ++n + n++;
? ? ?
//或 var r=++n + n++ + ++n;
console.log(r);
//?
提示:所有表达式,默认从左向右执行
优先级高的先执行 ++的优先级 高于 +
逻辑运算符的案例:
<script>
var H=180,D=218,B=true;
var H=180,D=2,B=false;
var H=155,D=2,B=false;
console.log("嘉宾1:"+(H>178&&D>1&&B==true));
console.log("嘉宾2:"+(H>178||D>1||B==true));
console.log("嘉宾3:"+(H>155||D>1||B==false));
</script>
短路逻辑的案例:
<script>
/*短路逻辑||*/
var comment=prompt("请输入评论");
console.log(comment||"主人很懒,什么也没留下");
</script>
相关文章推荐
- 【杭电oj】1873 - 看病要排队(优先队列,水)
- 我来看性能问题
- java小小工具第三弹 文本编辑器
- DELPHI XE7 新的并行库
- LeetCode Super Ugly Number
- POJ 1743:后缀数组
- ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发
- DBMS_UTILITY.GET_CPU_TIME和DBMS_UTILITY.GET_TIME
- MVC中将上一次导出的EXCEL文件导入验证并保存到数据库中
- [LeetCode OJ]11. Container With Most Water
- Android客户端首次启动时的引导界面(viewpager)
- 安卓学习记录,BaseAdapter的使用
- DELPHI7在WIN8和WIN10下安装和运行
- homework1-spm
- day27:Spark on Yarn彻底解密
- C语言回顾--循环
- delphi不同版本字符串类型的演化(要支持基于firemonkey的app调用,字符串最好使用olevariant类型)
- js函数收藏:获取cookie值
- 第二章变量和基本类型
- Spring mvc接收前端日期类型字符串,AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方