第13章 JavaScript语法详解


13.1 JavaScript简介
 (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语法创建对象

返回目录