javascript语言精粹书籍学习
标识符
由一个字母开头,可选择性加上一个或多个字母、数字和下划线。不能使用保留字。
被用于语句、变量、参数、属性名、运算符和标记
数字
只有浮点数这一数字类型
值NaN时一个数值,标识不能产生正常结果的运算结果,不等于任何值,包括它自己
值Infinity,标识大于1.79769.。。。。。。。的值
字符串
JS的所有字符都是16位的,应为Unicode是一个16位的字符集
字符串时不可变的,有一个length属性
语句
一个编译单元包含一组可执行的语句
表达式
最简单的表达式时字面量值(比如字符串和数字)、变量、内置的值
以new为前导的调用表达式、以delete前导的属性存取表达式、包括圆括号
中的表达式、以一个前缀运算符作为前导的表达式,或者表达式后面跟着。。。
字面量
对象字面量是一种方便指定新对象的表示法
属性名可以是标识符或字符串
对象
对象是属性的容器,每个属性都拥有名字和值
JS中的对象是无类别的
JS包括一个原型链特性,允许对象继承另一对象的属性
对象字面量
提供了一种非常方便的创建新对象值的表示法
一个对象字面量就是包围再一堆花括号中的0或多个“名/值”对
对象字面量可以出现在任何允许表达式出现的地方
检索
[]
.
||运算符可以用来填充默认值
更新
被替换或者被扩充
引用
对象通过引用传递,永远不会被拷贝
原型
每个对象都连接到一个原型对象,并且它可以从中继承属性
委托:如果想要的属性完全不存在与原型链中国,结果就是undefined值
原型关系是一种动态关系,如果添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见
反射
检查对象并确定对象是什么属性
枚举
for
for in
删除
delete运算符可以用来删除对象的属性
减少全局变量污染
全局变量削弱了程序的灵活性
把多个全局变量都整理在一个名称空间下
函数
函数对象
函数就是对象
每个函数创建时由两个附加的隐藏属性:函数的上下文和实现函数行为的代码
函数可以拥有方法
函数字面量
函数对象可以通过函数字面量创建
函数字面量由四个部分:保留字function,函数名,包围在圆括号中的一组参数,包围在花括号中的一组语句
函数字面量可以出现在任何允许表达式出现的地方
调用
调用一个函数将暂停当前函数的执行,传递控制权和参数给新韩淑
除了形参,每个函数接收两个附加的参数:this和arguments.this取决于调用模式
JS中有四种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式
这些模式在如何初始化this上存在差异
调用运算符:跟在任何一个产生函数值的表达式之后的一堆圆括号。实参多了,忽略;实参少了,undefined。对参数值不会进行类型检查
方法调用模式
一个方法:当一个函数被保存为对象的一个属性时
如果一个调用表达式包含一个属性存取表达式(一个.表达式或[]下标表达式)
通过this可取得它们所属对象的上下文的方法成为公共方法
函数调用模式
当一个函数并非一个对象的属性时,那么它被当作一个函数来调用
在外部定义一个函数,赋值给this,this为全局对象
内部函数调用时不能共享该方法对对象的访问权,可以在函数内部定义that指向this
构造器调用模式
原型继承:对象可以直接从其他对象那里继承属性
结合new前缀调用的函数被称为构造器函数
apply调用模式
apply方法构建一个参数数组并用其取调用函数
apply方法接受两个参数,第一个时绑定给this的值,第二个就是一个参数数组
参数
函数被调用时,可以得到一个arguments数组,arguments不是一个真正的数组,是一个类似数组的对象
返回
一个函数总是会返回一个值,如果没有指定值,返回undefined
如果函数前面加上new方式调用,且返回值不是一个对象,则返回this(该新对象)
异常
异常时干扰程序的正常流程的非正常的事故
throw语句中断函数的执行
给类型增加方法
JS允许给语言的基本类型增加方法
基本类型的原型时公共的结构
递归
递归函数会直接或间接的调用自身的函数
作用域
作用域控制者变量与参数的可见性和生命周期
闭包
该函数可以访问它被创建时的上下文环境
作用域的好处是内部函数可以访问定义他们的外部函数的参数和变量
内部函数拥有比它的外部函数更长的生命周期
闭包函数:声明在一个函数中的函数
内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回了之后
回调
函数可以让不连续事件的处理变得更容易
发送异步的请求,提供一个当服务器的响应到达时将被调用的回调函数。异步函数立即返回,客户端不会阻塞
模块
模块:一个提供接口却隐藏状态与实现的函数或对象
模块模式利用了函数作用域和闭包来创建和绑定对象与私有成员的关联
模块模式的一般形式:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问到的地方
模块模式可以代替全局变量的使用
级联
有一些方法没有返回值,让这些方法返回this而不是undefined,可以启用级联。一个级联中,可以在单独一条的语句中依次调用同一个对象的很多种方法
套用
套用允许我们将函数与传递给它的参数相结合去产生一个新的函数
记忆
函数可以用对象去记住先前操作的结果