一 一元运算符
只能操作一个值的运算符叫做一元运算符
var a = ++b; //加后取值先执行加法运算, 再取值
var a = b++; //加前取值先取值, 再执行加法运算
其他类型应用一元运算符的规则
var b = '89';
b++; //90,数值字符自动转换成数值
var b= 'ab';
b++; //NaN,字符串包含非数值转成NaN
var b = false;
b++;//1,false转成数值0,累加就是1
var b = 2.3;
b++; //3.3,直接加1
Number(true) 1
Number(false) 0
二 关系运算符
(1) 用于进行比较的运算符称作为关系运算符.关系运算符如下:
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、
相等(==)、不等(!=)、全等(恒等)(===)、不全等(不恒等)(!==)
关系运算符的比较规则:
1, 数字和数字比较, 直接比较大小
2, 数字和字符串比较, 字符串转换为数字后再比较
3, 字符串和字符串比较, 进行字符的ASCII码值比较
比较注意事项:
1,布尔值 ture=1, false=0
2, 只要不等于NaN, 就是true,其他有NaN的运算都为false
3, 如果要恒等, 则必须值和类型都要相等;
(2) 关系运算符(特殊值)
三 逻辑运算符
逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)
逻辑与&&运算符属于短路操作,顾名思义,如果第一个操作数返回是false,第二个数不管是true还是false都会返回false。
逻辑或||运算符也是短路操作。当第一操作数的求值结果为true, 就不会对第二个操作数求值了。
四 逻辑非(NOT):!
逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个布尔值。它的流程是:先将这个值转换成布尔值,然后取反,规则如下:
Ø操作数是一个空字符串,返回true; 非空字符串, 返回false
Ø操作数是数值0,返回true; 任意非0数值(包括 Infinity),返回false
Ø操作数是NaN, 返回true
Ø操作数是undefined, 返回true
五 赋值运算符:
赋值运算符用等于号(=)表示,就是把右边的值赋给左边的变量。
复合赋值运算符通过x=的形式表示,x表示算术运算符。
如:=、+=, -=, *=, /=, %=等
六 算数运算符和其他运算符:
算数运算符:+,-,*, /, %(取余数)
三目运算符: ?:
字符串运算符: 字符串运算符只有一个,即:“+”。它的作用是将两个字符串相加。规则:至少一个操作数是字符串
实例: 3>5?'大于':'不大于'
七 程序的三大流程控制
共有三种基本结构:
顺序:从上朝下执行的代码就是顺序
分支(选择):根据不同的情况,执行对应代码
循环:重复做一件事情
(1) 顺序结构
顺序结构是最简单的程序结构,它是由若干个依次执行的处理步骤组成的。如图,A语句和B语句是依次执行的,只有在执行完A语句后,才能接着执行B语句。
(2) 分支结构
在处理实际问题时,只有顺序结构是不够的,经常会遇到一些条件的判断,流程根据条件是否成立有不同的流向。如下图所示,程序根据给定的条件P是否成立而选择执行A操作或B操作。这种先根据条件做出判断,再决定执行哪一种操作的结构称为分支结构,也称为选择结构。
1.IF单分支
if条件判断语句的写法:
if(表达式){
执行语句
}
当括号内的表达式结果成立(为true时),则执行大括号内的语句,否则不执行。
注意:
- if后面的()不能省略。
- 一条执行语句可以省略{}, 多条时不能省略{}, 建议不管是一条还是多条都写上{}
简写
if(0>1)
console.log('大于')
if(0>1) console.log('大于')
2. IF双分支语句
if(表达式){
执行语句1
}
else{
执行语句2
}
当if括号内的表达式结果成立,执行执行语句1,否则执行执行语句2;
判断一个年份是闰年还是平年;
(1.能被4整除而不能被100整除.(如2004年就是闰年,1800年不是.)
2.能被400整除.(如2000年是闰年))
简写
if(0>1)
console.log('大于')
else
console.log('不大于')
3 IF多分支语句
if多分支语句的写法:
if(表达式){
执行语句1
}
else if(表达式2){
执行语句2
}
else if(表达式3){
执行语句3
}
else{
执行语句n
}
从上往下,满足哪个条件就执行其相对应的语句,都不满足时,执行最后的
else
的语句,只能进入其中之一
4 IF的嵌套
将整个if语句块插入另一个if语句块中
if (表达式1) {
if (表达式2) {
if (表达式3){
语句;
}
else{
语句;
}
}
else{
语句;
}
}
注意:嵌套if时,最好不要超过三层; 内层的每一对if...else代码要缩进且对齐;编写代码时,else要与最近的if配对。
5 Switch语句的写法:
switch(表达式) {
case 常量1:语句; break;
case 常量2:语句; break;
case 常量n:语句; break;
default:语句; break;
}
表达式的结果等于哪个case的常量,则执行其后的语句,执行完break就跳出switch结构,都不满足则执行default的语句。
break的作用:是跳出switch结构,如果没有break,则继续执行下面分支的的语句(而不进行判断)。
注意case穿透,要加break
switch的应用场景:表达式为固定值,不能判断范围
(3) 循环结构
需要重复执行同一操作的结构称为循环结构,即从某处开始,按照一定条件反复执行某一处理步骤,反复执行的处理步骤称为循环体
八 循环的分类
(1).while循环
(2). do-while循环
(3). for循环
- for in
- forEach
1. while循环语法格式:
while(表达式)
{
执行代码;
}
注意: 1, while循环必须按照上述语法格式来写, 只能更改表达式内容和执行代码.
2, 表达式可以是常量,变量或者其他表达式,该表达式会被强制转换为boolean类型, 可以理解表达式就是循环的条件.
3, 执行代码可以有多行, {}所包含的称为循环体.
4, 表达式不要一直是true, 避免死循环.
5. while循环的顺序是: 先判断表达式是否为true, 若true则执行执行代码, 然后再继续判断表达式是否为true, …. 直到判断表达式为false才会跳出循环, 执行while后面的代码
while循环一般会有: 循环初始值, 循环条件 和 循环变量增量(或者减量)
do{
}while();
练习:
打印100以内 7的倍数
打印100以内的奇数
打印100以内所有偶数的和
打印图形
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
//右侧倒三角线
var j=9;
do{
//控制空格字符的输出
var k = 9-j;
do{
if(j==9){
break;
}
document.write('*');
k--;
}while(k>=1);
//输出右侧三角形的元素
var i = j;
do{
document.write(i);
i--;
}while(i>=1);
document.write('<br />'); //控制行的输出
j--;
}while(j>=1);
2. for循环语法格式:
for (表达式1; 表达式2;表达式3){
执行代码;
}
for循环将 循环初始值, 循环条件, 循环变量增量写在了一起
注意: 三个表达式都是可选填写, 但是如果后两个不写,会造成死循环; 而第一个为初始化值,所以我们三个一般都要写上.
简写
var i=1;
for(;;){
if(i>100){
break;
}
document.write(i+'<br />');
i++;
}
注意: 1,表达式1:可写循环初始值, (可以不填)
2,表达式2: 循环条件
3,表达式3: 循环增量(减量)
4,两个分号必须写.
3. For in 返回索引值
for(var i in Array){
console.log(i)
}
4. forEach 返回值
Array.forEach(function(arg){
console.log(arg)
});
5. break关键字
1,在switch语句中使流程跳出switch结构。
2,在循环语句中使流程跳出当前循环
注意:
1,如果已执行break语句,就不会执行循环体中位于break后的语句。
2,在多层循环中,一个break语句只向外跳一层
6. continue关键字
只能在循环语句中使用,使本次循环结束,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判断。
注意:
1,continue语句只能用在循环里。
2,对于while和do-while循环,continue语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新。