内容:
运算符及表达式
流程控制-分支结构
运算符及表达式
运算符即让数据进行运算的符号,数据及运算符构成的式子称为表达式,广义上所有能返回某个值的语句都可称为表达式 如变量,字面量,函数调用 等
算术
问题:
1 有哪几种算术运算符?+-*/%
2 思考:如何证明一个数是偶数? n%2==0
+ - *(乘) /(除) %(求余) 算术运算符 算术表达式 计算所得的结果即为算术表达式的值注意:小数与小数作算术运算会有误差(原因;计算机内数据底层为二进制表示),因此小数算术运算后得到的结果和另一个值做比较运算时 可能会出问题0.1+0.2==0.3 // false5%8 //510%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变成1console.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 //10&&100&&1000 //01||10000 //10||0.5 //0.5var a=9,b;(a<10)&&(b=a);console.log('b的值为'+b) //9var 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 :表达式2var 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结构更清晰,且效率更高
