转换为布尔型
1.代表空、否定的值会被转换为false,如' '、0、NaN、null、underfined
2.其余值都会被转换为true
console.log(Boolean(' ')); //false
console.log(Boolean(0)); //false
console.log(Boolean(NaN)); //false
console.log(Boolean(null)); //false
console.log(Boolean(underfined)); //false
console.log(Boolean('小白')); //true
console.log(Boolean(12)); //true
翻译器翻译的两种方式:一个是编译,一个是解释。两种方式之间的区别在于翻译的时间点不同
编译器是在代码执行之前进行编译,生成中间代码文件
编译器是在运行是进行及时解释,并立即执行(当编译器以解释方式运行的时候,也称之为解释器
运算符
比较运算符
概念:比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true/false)作为比较运算的结果。
< 小于号 > 大于号 >= 大于等于号 <= 小于等于号
== 判断好 != 不等号 === !== 全等 要求值和数据类型都一致
= 赋值(把右边给左边)
== 判断(判断两边值是否相等,注意此时有隐式转换)
=== 全等(判断两边的值和数据类型是否完全相同)
等号比较
//==默认的情况下转换数据类型,会把字符串类型的数据转换成数字型
console.log(18 == '18');
console.log(18 === '18');
逻辑运算符
概念:逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。
&& "逻辑与" || "逻辑或" ! "逻辑非"
1.逻辑与&& 两边的结果都是true,结果才是true,只要有一侧又false就是false
console.log(3>5 && 3>2); false
console.log(3<5 && 3>2); true
2.逻辑或 两侧都是false,才是false,只要有一侧是true就是true
console.log(3>5 || 3>2); true
console.log(3>5 || 3<2); false
3.逻辑非
console.log(!true); false
练习代码
var num=7;
var str="我爱你~中国~";
console.log(num >5 && str.length >= num); true
console.log(num <5 && str.length >= num); false
console.log(!(num<10)); false
console.log(!(num<10 || str.length == num)); false
//逻辑与的短路运算 如果表达式1的结果为真的话,返回值是表达式2,如果表达式是假,返回的是表达式1
console.log(123 && 456); 结果:456
console.log(0 && 456); 结果:0
console.log(0 && 1+2 && 56789 && 456); 结果:0
console.log('' && 1+2 && 56789 && 456); 结果:" "
//逻辑或的短路运算 如果第一个表达式的值为真,则返回表达式1 如果第一个表达式的值为假,则返回表达式2
console.log(123 || 456); 结果:123
console.log(0 || 456); 结果:456
console.log(0 || 56789 || 456); 结果:56789
var num=0;
console.log(123 || num++); 123
console.log(num); 0
赋值运算符
概念:用来把数据赋值给变量的运算
var age =10;
age += 5; //相当于age = age + 5
age -= 5; //相当于age = age - 5
age *+ 10; //相当于age = age *10
运算符优先级
1 小括号 ()
2 一元运算符 ++ -- !
3 算数运算符 先 * / % 后 + -
4 关系运算符 > >= < <=
5 相等运算符 == != === !==
6 逻辑运算符 先 && 后 ||
7 赋值运算符 =
8 逗号运算符 ,
练习代码
console.log(4 >= 6 || '人' != '阿凡达' && !(12*3 == 122) && true); true
var num=10;
console.log(5 ==num/2 && (2+2*num).toString() === '22'); true
//console.log(5 == 10/2);
流程控制
流程控制主要有三种结构,分别是 顺序结构 分支结构 循环结构,代表三种代码的顺序。
顺序流程控制
分支流程控制
- if语句
//条件成立执行代码,否则什么也不做 if(条件表达式){ //条件成立执行的代码语句 }
- if else语句(双分支语句)
//条件成立 执行if 里面的代码,否则执行false 里面的代码 if(条件表达式){ //[如果]条件成立执行的代码 }else{ //[否则]执行的代码 }
- if else if语句(多分支语句)
//适合于检查多重条件 if(条件表达式1){ 语句1: } else if(条件表达式2){ 语句2: } else if(条件表达式3){ 语句3: ... } else { //上述条件都不成立执行此处代码 }
- 三元运算符
表达式1 ? 表达式2 : 表达式3;
执行思路:如果表达式1为true,则返回表达式2的值,如果为表达式1为false,则返回表达式3的值
- switch分支流程控制
语法结构
switch语句也是多分支语句,它用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用 switch。
switch(表达式){
case value1;
//表达式等于 value1 时要执行的代码
break;
case value2;
//表达式等于 vaLue2 时要执行的代码
break;
default;
//表达式不等于任何一个 value 时要执行的代码
}
- switch:开关转换,case:小例子选项
- 关键字switch,后面括号内可以是表达式或值,通常是一个变量
- 关键字case,后跟一个选项的表达式或值,后面跟一个冒号
- switch表达式的值会与结构中的case的值做比较
- 如果存在匹配全等(===),则与该case关联的代码块会被执行,并在遇到break时停止,整个switch语句代码执行结束
- 如果所有的case的值都和表达式的值不匹配,则执行default里的代码
注意:执行case里面的语句时,如果没有break,则继续执行下一个case里面的语句。
switch语句和ifelseif语句的区别
一般情况下,它们两个语句可以相互替换
switch.case语句通常处理case为比较确定值的情况,而ifelse…语句更加灵活,常用于范围判断(大于、等于某个范围)
switch语句进行条件判断后直接执行到程序的条件语句,效率更高。而if.else语句有几种条件,就得判断多少次。
当分支比较少时,if...else语句的执行效率比switch语句高。
当分支比较多时,switch语句的执行效率比较高,而且结构更清晰。