第一章
- javascript 由下列三个部分组成
- ECMAScript ,语言核心
- DOM(文档对象模型)
- BOM(浏览器对象模型)
第二章
-
<script>标签属性
- async(异步,立即下载脚本,不妨碍页面中其他操作,只对外部脚本文件有效)
- defer(表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部文件有效)
- type(一般还是text/javascript,默认值也是这个)
<script>中嵌入脚本代码,不要出现“</script>”这个字符串
解析脚本时,页面的处理也会暂时停止
浏览器会按照<script>元素在页面中的出现先后顺序对它们依次进行解析
浏览器在遇到body标签后才开始呈现内容
现代web一般把全部javascript引用放在<body>元素中页面内容的后面,即</body>的前面
defer的延迟脚本会在浏览器遇到</html>标签后再执行
最好只包含一个延迟脚本,并放在页面最底部
文档模式:<!DOCTYPE html>
<noscript> 其中可以包含<body>中包含的任何元素,除了<script>,用来放浏览器不支持脚本或脚本被禁用时的替代内容
第三章
3.1
- "use strict"; 严格模型
3.2 数据类型
- ECMAScript中有5种简单数据类型:Undefined、Null、Boolean、Number和String。一种复杂类型:Object
Undefined类型
- 对未初始化的变量执行typeof会返回undefined,对未声明的变量执行typeof也会返回undefined
Null类型
- 从逻辑角度看,null值表示空对象指针
Boolean类型
- Boolean()转型函数
- Number类型:任何非0数字值(包括无穷大)->true;0和NaN->fasle
Number类型
- 八进制字面量在严格模式下是无效的
浮点数值
- 小数点后至少有一位数字
- e表示法:3.125e7 = 3.125 * 10的7次方
- 浮点数值最高精度是17位小数
数值范围
* 最小数值:Number.MIN_VALUE(5E-324)
* 最大数值:Number.MAX_VALUE(1.797693...e+308)
- 超出数值返回会转换成Infinity或-Infinity,他们不能参与数值计算
- isFinite()函数确定一个数值是否超出范围
- Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY也可以得到正负无穷
NaN
- 任何数值除以非数值会返回NaN,因此不会影响其他代码执行
- 任何涉及NaN的操作都会返回NaN
- NaN和任何值都不相等,包括NaN本身
- isNaN()
数值转换
- Number()、parseInt()、parseFloat()
- Number()
- 如果是null,返回0
- 如果是undefined,返回NaN
- 如果是对象,调用对象valueOf()方法,如果转换结果是NaN,则调用对象的toString()方法,再按照字符串转换规则转换
- parseInt()
- 转换空字符串会返回NaN
- "1234blue"会转成1234
- 第二个参数设置基数,默认10,10进制
- parseFloat()
- 只解析10进制,忽略前导0,16进制字符串被解析成0
- 解析到遇到一个无效浮点数字为止
String类型
- num.toString(10)可以输出不同进制
- String()方法
- 如果值有toString(),调用之
- null,返回“null”
- undefined,返回“undefined”
3.3 操作符
- 前置++,--的值会在语句被求值之前被改变
- +操作符会对值进行Number()操作
- 位操作符:~,&,|,……
- 左移操作符:<< 右边空位补0,不影响符号位
- 有符号右移: >> ,左边空位补符号位,符号位不移动,空位出现在符号位右侧
- 无符号右移:>>> 会将数值的所有32位都向右移动,空位补0
- 逻辑与和逻辑或是短路操作符,即如果第一个操作数能够决定结果,就不会对第二个操作数求值
- var myObject = preferredObject || backupObject;
- Infiity*0 结果是NaN
- Infinity/Infinity 结果是NaN
- 0/0 ,结果是NaN
- Infinity-Infinity,结果如果看起来是0,则返回NaN
- 比较操作符:任何操作数与NaN进行关系比较,都返回false
- null 和 undefined是相等的
- 在比较相等性之前,不能将null和undefined转换成其他任何值
- 如果有一个操作数是NaN,相等操作符返回false,不相等返回true
- 对于对象,比较两个对象是不是同一个对象
- 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较
3.4语句
- switch语句中可以使用任何数据类型,每个case值不一定是常量,可以是变量,甚至表达式
- switch在比较值是使用的是全等操作符
3.5函数
- 即时你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数,可以传1、3、甚至不传。
- 在函数体内可以通过arguements对象访问参数数组,可以根据参数个数不同做不同的事,来模仿重载
- ecmascript传参都是传值,不可能传引用
- 未指定返回值的函数返回的是特殊的undefined
var出的变量是函数级作用域,作用范围是在函数开始阶段和函数执行完成之前内都是存在的;并且如果该函数内部还存在匿名函数等特殊函数,这个var出的变量在匿名函数中任然可以用;
let出的变量作用域是 块作用域,在离开某一代码块,该变量就会被销毁不存在