# 一、复习
1、js历史
2、ji组成
4、js的打印语句
- alert()
- 默认将数据以字符的形式打印
- 一行代码只能打印一个数据
- document.write()
- 一行代码只能打印一个或多个数据,每个数据之间使用逗号隔开
- 影响页面布局
- console.log()
- BOM的V8引擎
- 静默打印,以数据的原本类型打印
5、js的数据类型
- string,number,bollean,abject,function,undefined,null
- typeof 要检测的数据或者变量
6、js的变量
- 变量命名规则
- 必须字母开头或下划线或$开头,
- 不允许使用关键字和保留字
- 语义化 大小驼峰
# 三、js的常见运算符
1、一元:++ --
- 自增:++
- 在自身的基础上增加1,修改返回自身
- 前:++n:先自增计算,再使用变量
- 后:n++:先使用变量,再自增计算
- 自减:--
- 在自身的基础上减少1,修改返回自身
- 前:--n
- 后:n--
2、二元:算数、关系、逻辑、赋值
3、三元:值1?值2:值3
# 四、关于NaN
1、NaN:非法的转换或数值运算得到的结果
- NaN :not a Number
- 不是一个数字的数值型数据
- NaN和任何数据都不相等,包括自身
2、专门的检测NaN的方法
- isNaN()
- true表示是NaN
- false表示不是NaN
- isNaN()小括号内也会发生数据类型转换,将数据转换成数值
# 五、关于计算机中浮点数的精度问题
1、如:0.1+0.2 !==0.3
2、原因:机制转换
整数转二进制:不断除以2,取余数,从上向下拼接,得到的就是二进制
小数转二进制:将小数部分不断的乘以2,最终得到0,从上到下取整数位拼接,
0.12
3、解决:
- 在已知小数位的情况下,先转成整数,再将计算结果转回去
# 六、数据类型的转换
1、如果通过计算机得到数据不是我们想要的类型,此时需要将数据转换
2、隐式类型
- 没有主动使用某些方法,而是在运算过程中,由计算机程序自动转换,只是在运算过程中转换,不影响数据本身
- 转换场景:1、某些运算符 - +
3、显示(强制)类型转换
- 主动使用某些方法强行转换,转换只是发生在执行方法的位置,也是没有影响原数据
- 其他转数值:
- 转整数:parseInt()
- 非严格转换,不能识别小数点
- 转小数:parseFloat()
- 非严格转换,能识别小数点
- 四舍五入取最近的整数Math.round()
- 严格转换
- 其他转数值: Number()
- 其他转字符:
- 要转换的数据或变量.toString()
- 保留n位小数转字符:(数值)/数值变量.toFixed(n)
- 其他转字符:String(要转换的数据或变量)
- 其他转布尔:
- Boolean()
<!-- - 其他转对象: -->
4、转换规则
- 其他转数值
- 非严格转换:从左向右依次检测字符,能转则转,不能则直接NaN
- 严格转化:只要出现一个非数字的内容,就是NaN
- 其他非字符的转换
1、第项、函数、nudefind都是NaN
2、空数组转为0
3、数组内,有且只有严格能严格转换成数值的数据,为当前数值
- 其他转字符
- 对象转成:“[object Object]”
- 数组相当于将中括号替换成引号
- 其他都相当于直接给数据添加引号
- undefined和null不能直接使用任何方法,但是可以被String方法转换
- 其他转布尔
- 字符:非空为true,空为false
- 数值:非0为ture,0为false
- undefined,null,NaN都为false
- 对象,数字,函数都为true
# 七、程序的结构
1、顺序结构
- 自上而下执行
2、选择(分支)结构
- 必须配合分支语句才能执行,根据不同的条件选择不同的执行语句
3、循环结构
- 必须配合循环语句才能使用,重复执行某段代码或程序
# 八、分支(选择语句)结构
1、单分支:只有严格功能可供选择,执行或不执行
- if(){}
2、双分支:根据条件的不同结果(只有true或false),选择不同的语句执行,只有两种选择
- if(){}else{}
3、多分支:根据条件的不同结果,选择不同的语句执行
- if-else嵌套实现
- switch(){}
- case的穿透特性:一个switch只会进行一次正确的case判断,之后会自动执行所有的执行语句
- 阻止穿透:执行完正确的语句之后,立即结束分支语句,使用break,最后default
- 更适合处理具体的值的判断(将数据处理成具体的值,再使用)(借助布尔值判断)