内容:
运算符及表达式
流程控制-分支结构
运算符及表达式
运算符即让数据进行运算的符号,数据及运算符构成的式子称为表达式,广义上所有能返回某个值的语句都可称为表达式 如变量,字面量,函数调用 等
算术
问题:
1 有哪几种算术运算符?+-*/%
2 思考:如何证明一个数是偶数? n%2==0
+ - *(乘) /(除) %(求余) 算术运算符 算术表达式 计算所得的结果即为算术表达式的值
注意:小数与小数作算术运算会有误差(原因;计算机内数据底层为二进制表示),因此小数算术运算后得到的结果和另一个值做比较运算时 可能会出问题
0.1+0.2==0.3 // false
5%8 //5
10%3 //1
自增自减 *
问题:
1 a 和 a有何异同?相同点:都能让变量自增1 不同点:表达式的值不同a的值即为a+1 a的值为a
//a++ ++a均可使变量自增1,区别在于a++表达式的值为a的初始值 ++a表达式的值为a+1之后的值,a-- --a同理
var a=0;
console.log(a++);//输出0,a变成1
console.log(++a);//输出2,a变成2
比较(关系)
问题:
1 比较运算符计算后的到的结果是什么数据类型?
2 ==和=有何区别?
//比较表达式的值均为true或false
表达式1==表达式2 相等(只比较 值,不要求数据类型一致)
表达式1!=表达式2 不等(只比较 值,不要求数据类型一致,值不相等时返回true,否则返回false)
表达式1===表达式2 全等(同时比较值和数据类型,仅当两者均相等时结果才为true)
表达式1!==表达式2 不全等(同时比较值和数据类型,两者有一个不相等时结果即为true)
> < >= <=
'12'> '2' //false 两个字符串作比较时 按字典排序规则 比较
'12'>2 //true 字符串和数字比较时 会发生隐式转换,将字符串转化为数字 来比较
逻辑
问题:
1 有哪几种逻辑运算符?计算规则分别是?
2 逻辑与中断何时发生?
3 逻辑或中断何时发生?
与:&& 或:|| 非:!
表达式1 && 表达式2 构成逻辑与表达式,只要表达式1/2中有一个为false,则整个逻辑表达式的值为false,仅当表达式1/2均为true时,逻辑表达式的值才为true
表达式1 || 表达式2 构成逻辑或表达式,只要表达式1/2中有一个为true,则整个逻辑表达式的值为true,仅当表达式1/2均为false时,逻辑表达式的值才为false
!表达式 构成逻辑非表达式 表达式值为true时,整个逻辑非表达式的值为false,反之为true
逻辑表达式短路现象
表达式1 && 表达式2 当表达式1为false时(整个逻辑表达式的值已确定),表达式2不会执行
表达式1 || 表达式2 当表达式1为true时(整个逻辑表达式的值已确定),表达式2不会执行
3&&1 //1
0&&100&&1000 //0
1||10000 //1
0||0.5 //0.5
var a=9,b;
(a<10)&&(b=a);
console.log('b的值为'+b) //9
var a=9,b;
(a>=10)&&(b=a);
console.log('b的值为'+b) // undefined
赋值
问题:
赋值运算符得到的结果是什么?
= a=2 // 将2赋值给变量a,赋值运算符 对应 赋值表达式 赋给变量的值即为赋值表达式的值
+= a+=2 // 相当于a=a+2
-= a-=2 // 相当于a=a-2
*= a*=2 // 相当于a=a*2
/= a/=5 // 相当于a=a/5
%= a%=3 // 相当于a=a%3
//a+=1 与 a++的区别:
var a='1';
a+=1 与 a=a+1 完全一致 赋值结束后a为'11'
a++ 赋值结束后a为2
条件
表达式1?表达式2:表达式3 //当表达式1为true时,执行表达式2且表达式2的值为三元表达式整体的值,否则执行表达式3且表达式3的值为整体三元表达式的值,当if...else...中代码较简单时,可用三元表达式实现
var a = 2,b = 3;
var c = a>b?a-b:b-a;
console.log(c)//1
逗号运算符(了解)
表达式1,表达式2 构成逗号表达式 值为 最后一个表达式的值
位运算(了解)
& 按位与
| 按位或
>> 右移位
<< 左移位
运算符优先级
()>一元(! ++ --)>算术>关系(比较)>逻辑>条件>赋值>逗号
//注意:关系运算符中==及===相对而言优先级更低 逻辑运算符中 &&优先级高于||
流程控制-分支结构
概念
通过某些语句控制代码的执行顺序即称为流程控制,三种流程控制结构:顺序(默认),分支,循环
if 语句
基本用法:
if(表达式){
语句 //当()中表达式为true时执行 语句,否则不执行
}
双分支:
if(表达式){
语句1 // 当()中表达式为true时执行语句1
}else{
语句2 // 否则执行语句2
}
多分支
if(表达式1){
语句1 // 表达式1为true时执行语句1
}else if(表达式2){
语句2 // 表达式2为true时执行语句2
}else if(表达式3){
语句3 // 表达式3为true时执行语句3
}
...
else{
语句n // 上述表达式都为false时执行语句n,else也可省略,若省略则可能所有分支都不执行
}
三元表达式
格式:表达式1?表达式2:表达式3;
说明:当表达式1为true时,三元表达式的值 为表达式2的值,否则为表达式3的值
var a = 10;
var x = a>=10?a-1:a+1;
console.log(x) // 9
// 用户输入0~59之间的一个数字
// 如果数字小于10,则在这个数字前面补0,(加0 拼接) 否则 不做操作
// 用一个变量接受这个返回值,输出
var time = prompt('请您输入一个 0 ~ 59 之间的一个数字');
// 三元表达式 表达式 ? 表达式1 :表达式2
var result = time < 10 ? '0' + time : time; // 把返回值赋值给一个变量
alert(result);
switch语句
//switch是多分支语句的另一种写法
switch(表达式){
case 值1:语句1;break;
case 值2:语句2;break;
...
default:默认执行语句;
}
//注意:
//switch后()中表达式与case后面的值 按 全等===匹配,需要注意数据类型一致
//switch 中break起跳出switch结构的作用。可省略,若省略,则匹配到的case语句执行完后会继续执行下面的语句,直到遇到break或执行完所有case才会跳出switch结构。
//switch与if...else if...结构比较:
//switch语句适用于多分支判断条件为等于 某个具体的值 时,if...else if...适用于于分支判断条件为 在某个范围时,总体上if...else if应用范围更广,能用switch实现的都能用if...else if...实现
//当判断条件为等于某些具体的值,且分支较多时用switch结构更清晰,且效率更高