目录
1.比较运算符
比较运算符:>、<、>=、<=、==、!=、===、!==
(1) =、==、===的区别(面试题)
=:赋值
==:比较,且会默认进行隐式数据类型转换
===:比较,无隐式数据类型转换
(2) !=与!==的区别(面试题)
!=:不等于,不会进行隐式数据类型转换
!==:不全等,即要看类型也要看数值,且默认会进行隐式数据类型转换
2.数据类型转换
(1)隐式数据类型转换
隐式转换:JS会根据运算符自动帮我们将数据类型转换成能够进行计算的类型
第一种情况:
a.字符串加数字,数字就会转成字符串
b.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字
c.乘,除,大于,小于跟减的转换也是一样
console.log(10 + '5')//'105'
console.log(10 - '5')//5
console.log(10 * '5')//50
console.log(10 / '5')//2
console.log(10 > '5')//ture
第二种情况:
a.undefined等于null
b.字符串和数字比较时,字符串转数字
c.数字和布尔比较时,布尔转数字
d.字符串和布尔比较时,两者转数字
console.log(undefined == null) // true
console.log('5' == 5) // true
console.log(1 == true)//true
console.log(0 == false)//true
console.log('1' + true)//2
注意:如果把加号放在字符串前面,那么会默认把字符串转成数值类型
var str = +'10' + 1
console.log(str)//11
0.1 + 0.2 == 0.3的结果是什么(面试题)
结果为false
计算精度问题:因为二进制在保存小数的时候存在精度丢失的问题,对于有些小数存储来说(有时候是多的,有时候是缺少的)
0.1+0.2=0.30000000000000004
解决方法是:用toFixed(),toFixed() 取小数位,也会进行隐式数据类型转换
console.log((0.1 + 0.2).toFixed(2) == 0.3) // true
(2)强制数据类型转换
强制转换:直接使用方法强行把不同类型的数据转换成相同类型的数据
【1】Number()
把其他类型转换成数值类型
a.把字符串转成数值类型
'10' -> 10 '10元' -> NaN
NaN(not a number):表示在数据类型转换过程中,无法以一个具体的数字来呈现最终的结果,因此返回NaN表示
注意:NaN本身就是一个数值类型,即typeof NaN ->number
如果把字符串转成数值类型,字符串里面不是纯数字的情况下,转换的结果是NaN
如果是空字符串或者字符串里面只有空格,那么转成数值类型后,结果是0
b.把布尔类型转成数值类型
true ->1 false -> 0
c.把undefined和null转成数值类型
undefined -> NaN null -> 0
null == NaN 与 null === NaN 的结果?(面试题)
都是false
NaN表示的不是某个固定的非数字类型,表示的是所有的非数字类型
typeof typeof 10 请问结果是什么?(面试题)
string
console.log(typeof 10) // number
console.log(typeof typeof 10) // string
console.log(typeof 'number') // string
在第三句'number'若不加引号就会被处理成变量,所以引号是必须有的,所以通常判断数据类型会这样写
console.log(typeof 10 == 'number') // true
console.log(typeof '10' == 'number') // false
【2】String()
把其他的数据类型转成字符串类型
a.把数值类型转成字符串类型
10 - > '10' NaN -> 'NaN' Infinity -> 'Infinity' (正无穷大)
b.把布尔类型转成字符串类型
true -> 'true' false -> 'false'
c.把undefined和null类型转成字符串
undefined -> 'undefined' null -> 'null'
注意:toString() 把其他的类型转成字符串类型
String()和toString()区别是什么?
toString()方法可以转换进制,括号里面传递进去的参数是什么,那么就对应转换成进制
(2、8、10、16进制)
【3】Boolean()
可以把其他的数据类型转成布尔类型
a.把数值类型转成布尔类型
把0和NaN转成布尔值结果是false,其他的都是true
b.把字符串类型转成布尔类型
把空字符串转成布尔类型结果是false,其他的都是true
c.把undefined和null转成布尔类型
把undefined和null转成布尔类型结果都是false
3.提取整数和浮点函数
parseInt():在一个字符串中,从左往右提取整型。如果遇到非整型的内容,则停止提取,并返回结果
parseFloat():在一个字符串中,从左往右提取浮点型。遇到非浮点型,则停止提取,并返回结果
4.逻辑运算符
(1)&& 逻辑与(也可以叫并且)。如果左右两个操作符都为true,则结果为true,否则,结果为false
逻辑与,就是两个条件同时满足时,结果为true
(2)|| 逻辑或。左右两个条件,只要一个满足,就返回true,否则,就返回false
(3)! 取反运算
三者的优先级:! > && > ||
// 面试题
console.log(1 && 0)//0
console.log(1 && 12)//12
console.log(8+0 && 66)//66
console.log(88 && 1-1)//0
console.log(1 + true && 12-11)//1
console.log(1 - true && 12-11)//0
5.三元运算符(三目运算符)
其实是对双分支选择结构的一种简化形式,不适合多分支选择结构
语法 : 条件 ? 业务代码1 : 业务代码2
6.流程控制三大结构
(1)顺序结构
按照程序的书写顺序,一条一条语句执行,不允许跳过任何一条语句
(2)选择(条件)结构
程序根据给定的条件是否成立而选择执行S2操作或S3操作。这种先根据条件做出判断,再决定执行哪一种操作的结构称为分支结构,也称为选择结构
a、if单分支选择结构
只判断true,不判断false
if(条件判断,结果只要两个true或false){
条件为true,将执行该代码
}
b、if else双分支选择结构
既判断true,又判断false
if(条件判断:结果只有两个true或false){
条件为true,将执行该代码
}else{
条件为false,将执行该代码
}
c、if else if多分支选择结构:
if(条件1){
代码1
}else if(条件2){
代码2
}else if(条件3){
代码3
}else{
如果以上条件都不成立,则执行该代码
}
注意;虽然有多个条件,但各条件之间是"或"的关系。每时每刻,只能有一个条件成立,不能同时满足多个条件
d.switch多分支结构
根据一个变量的不同取值,来执行不同的代码。
注意事项:case在进行值比较时,是以全等于来比较匹配的
switch(条件判断,通常为变量名){
case 值:1;
代码1;
break;
case 值:2;
代码2;
break;
case 值:3;
代码3;
break;
default:
如果以上条件都不满足,则执行该代码
}
注意:
每个case中的代码执行完毕后,必须用break语句结束,结束之后,程序将跳到switch结束大括号后运行。
如果不写break语句的话,下面的所以的case语句都会执行一遍。
(3)循环结构
见第三天