(1) 直接运行的JavaScript
(2) 导入JavaScript脚本
13.2 数据类型和变量(变量声明、类型转换、变量范围)
(1) 隐式定义变量(a=...)
(2) 显式声明变量(var a;)
(3) 自动类型转换
(4) 强制类型转换 parseFloat(a)
(5) 变量范围:全局|局部
(6) 变量没有块范围
(7) 变量没有块范围2
(8) 全局变量的作用范围
(9) conversion_test
13.3 基本数据类型(数值--大小、字符串(unicode)--前后、true|false|null、NaN|Infinity|undefined)
(1) 数值类型(科学计数法e|E)
(2) 数值类型
(3) 八进制(0)、十六进制(0x)
(4) 无穷大(Infinity)
(5) 负无穷大(-Infinity)
(6) NaN(非数字值 Not a Number)
(7) 无穷大相等比较
(8) 判断NaN(isNaN(x))
(9) 浮点型数精度丢失
(10) 字符串方法(长度.length; String.fromCharCode(97,98,99); .charAt(4); .charCodeAt(4) )
(11) 子串出现的位置(indexOf/lastIndexOf)
(12) 求子串(.slice())
(13) 匹配正则表达式(.search(), .match())
(14) 判断浏览器是否支持Cookie(boolean测试)
(15) undefined和null
(16) 字符串替换(.replace()正则表达式)
13.4 复合类型
(1) 数组声明、数组元素赋值、数组长度
(2) 函数(function)
(3) 函数2(typeof age === "number")
13.5 运算符
(1) 赋值运算符(=)
(2) 算术运算符(+-*/%)
(3) 自加1(a++ 先算术运算然自加)
(4) 自加2(++a 先自加后算术运算)
(5) Math类方法
(6) 位运算(---------)
(7) 位移运算符(---------)
(8) 比较运算(5=="5",5==="5")
(9) 字符串比较
(10) 逻辑运算符(&&,||,!)
(11) 伪逻辑运算符(&,|,^ --------)
(12) 不短路或(|)(---------)
(13) 短路或运算(||)
(14) 三目运算符
(15) 逗号运算符(---------)
(16) void运算符(---------)
(17) 判断变量数据类型运算符(typeof)
(18) 判断变量是否类实例(instanceof Array|Object)
13.6 语句
(1) 空语句(a, img, )
(2) 异常抛出语句(throw)
(3) 异常捕捉语句
(4) with语句
13.7 流程控制
(1) if语句(if、else; if、else if、else)
(2) 错误的if语句
(3) switch语句 switch break
(4) while循环while(){...}
(5) 死循环
(6) do while循环
(7) for循环(for)
(8) 死循环(for)
(9) for in循环1
(10) for in循环2
(11) break
(12) continue
(13) breakLabel
(14) continueLabel
13.8 函数
(1) 定义函数(function 函数名(参数,...){函数体})
(2) 函数返回(return 值;)
(3) 匿名函数
(4) Function类匿名函数
(5) 递归函数: 阶乘
(6) 局部函数和局部函数
(7) 局部函数错误:Uncaught ReferenceError: inner1 is not defined
(8) 函数是一个对象,Function类的实例
(9) 直接调用函数、将函数作为类的构造器
(10) 定义函数----类:属性与方法
(11) 直接定义函数,会作为window对象的方法
(12) 实例属性[this]/类属性[类名]/局部变量[var]
(13) 动态增加属性和方法
(14) call()方法动态调用函数
(15) apply()方法动态调用函数
(16) 函数的独立性
(17) 函数的独立性2
13.9 函数的参数处理
(1) 基本类型参数JS采用值传递方式: 函数内改变形式参数值,对函数外的实参不会有任何影响
(2) 复合类型参数依然是值传递方式: 函数内改变形式参数的属性值,会对函数外的实参属性值有影响,但=null不会影响实参
(3) 空参数:程序可以正常执行,只是没有传入实参的参数值将作为undefined处理
(4) 同名异参函数不重载:后面定义会覆盖前面定义
(5) 严格的参数类型检查
13.10 使用对象
(1) JS中的每个函数都可用于创建(new)对象,返回的对象既是该类的实例,也是Object类的实例。
JavaScript函数定义不支持继承语法。所以称JavaScript是基于对象的脚本语言。 开发者定义的类没有父子关系,这些类都是Object类的子类。
(2) 对象和关联数组(3) 创建(new)多个函数(或类)对象时,系统就会创建多个类的内部方法(函数), 造成系统内存泄漏,引起性能下降。
(4) 泄露函数内局部变量的值
(5) 伪继承机制: JS的所有类(即函数)都有一个prototype属性,当我们为JS类的prototype属性增加函数、属性时,则可视为对原有类的扩展。
(6) Array增加prototype.indexof方法
尽量避免使用内嵌函数为类定义方法,而应该使用增加prototype属性的方式来增加方法。
13.11 创建对象(1.new 类名;2.new Object;3.JSON)(1) new 类名(通常只定义属性)
(2) new Object(定义空对象,动态定义属性)
(3) new Object(定义空对象,new Function动态定义方法)
(4) new Object(定义空对象,将已有的函数添加为对象的方法)
(5) 使用JSON语法创建对象