运算符及控制语句
一元运算符
只能操作一个值的运算符 ++ -- (自动转为数值)
()前后不能直接写++
console.log(++(a--)); //() 不能和++ 一起使用
关系运算符
用于进行比较的运算符称作为关系运算符. 关系运算符有: 小于(<)、大于(>)、小于等于(<=)、
大于等于(>=)、相等(==)、不等(!=)、全等(恒等)(===)、不全等(不恒等)(!==)
- 字符串和数值进行比较(字符串会自动转为数值)
console.log(1>2);//false
console.log('123'> 213);//false 自动转为number
console.log('123a' > 213);//false 自动转为number,不能转就会出现NAN,就是false
- 出现NaN 一般都是false
console.log(NaN==NaN);//false
- undefined是null的派生所以对应的值是相等的
console.log(undefined==null);//true
console.log(undefined===null);//false
- 字符串和字符串进行比较 (ASCII码 A65 a97 自动进行ASCII码比较 比较第一位)
console.log('a' > 'b');//false
console.log('a' < 'b');//true
console.log('bAA' < 'aZZ');//false 比较第一个字母
- 布尔类型的值和null进行比较 自动转数值(出现NAN就是false)
console.log(true > null);//true
// console.log(true++);报错不被允许
console.log(true);//true
console.log(true > undefined);//false
- == 和 === 的区别(恒等,这俩个内容是一个内容)
==比较值是否一致
=== 除了判断值还要判断数据类型 (证明这俩个内容是否是一个内容)
//值属于常量 不能变的(地址唯一的)
console.log("123"==123);//true
console.log("123"===123);//false
会先转换再进行比较
console.log(Number(true)==1);//true
console.log(Number(true)===1);//true
console.log(Boolean(0)===false);//true
- undefined和0进行比较
console.log(undefined==0);//false NaN
- null和0进行比较 null是空对象引用 对应的是一个引用类型 引用类型比较的是地址
console.log(null == 0);//false
逻辑运算符
逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符:
&& 短路与 &断路与 || 短路或 |断路或 ! 取反
- && 短路与 所有的同时满足才为真 && 只要前面有一个是假后面的就不会看了 & 看完全部
var a = 10,b = 20,c = 30;
console.log(a > b && b < c); //false
console.log(c > b && b < c); //true
- || 短路或 有一个是true就是true,前面只要出现了true,就不看后面的。 | 看完全部
console.log(c > b || a > b); //true
- ! 取反
console.log(!c > b || a > b); //false
console.log(!(c > b || a > b)); //false
|| 常用
- 有一个true 取true
console.log(a > b || 20); //20
var i = 0 || 10
console.log(i);
- 如果俩个都是false 取最后一个
var str = undefined || ''
console.log(str); //''
- 如果俩个都是true 取第一个为true的
var str1 = 'a' || 'b'
console.log(str1); //a
var str2 = '' || "false" || 'true'
console.log(str2); //false
&&
- 如果出现false 直接取false 如果全是true 取最后一个
var str4 = 10 && 20
var str5 = undefined && ''
var str6 = !123
console.log(str4);//20
console.log(str5);//undefined
console.log(str6);//false
三目运算
三目运算和对应的逻辑运算优先级一样
var str3 = (10 > 20 ? '' : '123') || (30 > 20 ? '' : '456')
console.log(str3); //123
表达式的概念:
由运算符和操作数(变量或常量)组成的式子
算术运算符组成的式子叫算术表达式, 如:2+3;
关系运算符组成的式子叫关系表达式或者条件表达式, 如:a>5;
逻辑运算符组成的式子叫做逻辑表达式, 如:a&&b
运算符优先级(从上到下执行)
程序控制语句(所有的程序都有的 所有的语言都有)
控制程序的执行(利用条件控制 利用循环来控制)
程序的三大流程控制:
顺序:从上朝下执行的代码就是顺序
分支(选择):根据不同的情况,执行对应代码
循环:重复做一件事情
条件控制语句(只会进入其中一个条件)
- if 是可以使用区间值 也可以使用固定值
- switch必须要有规定的值的时候才有 他不会使用到有区间的内容(比对是恒等比对)
- if效率和switch效率 从一行代码区分对应的来说 if效率会高点 多行代码区分 switch效率会高(用空间换时间)
逻辑分支IF
if 如果(第一个条件) else if 如果(第二个条件 无限加) else 否则(只有一个)
if(表达式(boolean类型的值 自动转成boolean类型)){
执行语句1
}
else if(表达式2){
执行语句2
}
else if(表达式3){
执行语句3
}
else{ //上面都不满足的情况
执行语句n
}
示例
var a=10,b=20
//从上到下的顺序进行的 上面只有一个进入的下面的内容就不会执行了
if(a>b){
console.log('我是a的值为'+a)
}else if(a==b){
console.log('我是b的值为'+b)
}else if(a<b){
console.log('a的值小于b的值')
}else{
console.log('上面的都不满足')
}
iF的嵌套
将整个if语句块插入另一个if语句块中
if (表达式1) {
if (表达式2) {
if (表达式3){
语句;
} else{
语句;
}
} else{
语句;
}
}
示例
// 保证良好的缩进 保证可读性
// 求y的值
var x = prompt()
var y
//可能不是数值
//提取条件优秀级 先找出问题的条件 再找大的条件 再找小的条件
if(Number(x) || x == 0){
if(x<0){
y = -1
}else if(x==0){
y = 0
}else{
y = 1
}
console.log(y);
}else{
console.log('您的输入有误');
}
逻辑分支Switch
switch 表达式的结果等于哪个case的常量,则执行其后的语句,执行完break就跳出switch结构
switch(表达式) {
case 常量1:
语句;
break;
case 常量2:
语句;
break;
…
case 常量n:
语句;
break;
default: //都不满足
语句;
break;
}
示例
//输入等级grade,输出对应百分制成绩范围
var grade = prompt()
switch (grade) {
case 'A':
console.log('80-100');
break;
case 'B':
console.log('70-79');
break;
case 'C':
console.log('60-69');
break;
case 'D':
console.log('<60');
break;
default:
console.log('error');
}
//break 跳出 跳出整个代码块 switch代码以及循环代码块 如果没有break 从头走到底 会从满足条件的第一个走到default里面