javascript 有三部分构成,ECMAScript,DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他的浏览器风格迥异,IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象
1. 数组
在ECMAScript中数组是非常常用的引用类型了。ECMAScript所定义的数组和其他语言中的数组有着很大的区别。那么首先要说的就是数组也是一种对象。特点:“数组”即一组数据的集合。js数组更加类似java的容器。长度可变,元素类型也可以不同!数组长度随时可变!随时可以修改!(length属性)
常用方法:push、popshift、unshiftsplice、sliceconcat、join、sort、reverse等
2. Object
Object每个实例都会具有下列属性和方法:Constructor: 保存着用于创建当前对象的函数。(构造函数)hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中(而不是原型中)是否存在。isPrototypeOf(Object): 用于检查传入的对象是否是另外一个对象的原型。propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。toLocaleString():返回对象的字符串表示。该字符串与执行环境的地区对应.toString():返回对象的字符串表示。valueOf():返回对象的字符串、数值或布尔表示。
3. 单体对象
Global对象:(全局)这个对象不存在,无形的对象其内部定义了一些方法和属性:encodeURI,encodeURIComponent、decodeURI、decodeURIComponent、eval、parseInt、parseFloat、isNaN、Escape、 unescape
Math对象:内置的Math对象可以用来处理各种数学运算可以直接调用的方法:Math.数学函数(参数)求随机数方法:Math.random(),产生 [0,1) 范围一个任意数
4. this
this对象是在运行时基于函数的执行环境绑定的。在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。也就是说this关键字总是指代调用者。
5. call、apply
每一个函数都包含两个非继承而来的方法:call、apply。这俩个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
call、apply的用途之一就是传递参数,但事实上,它们真正强大的地方式能够扩充函数赖以运行的作用域。使用call()、aplly()来扩充作用域的最大好处就是对象不需要与方法有任何耦合关系。call方法简单的实现。
6. 执行环境、作用域链
执行环境(execution context)是javascript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每一个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。虽然我们的代码无法访问这个对象,但是解析器在处理数据时会在后台执行它。
全局执行环境是最外围的一个执行环境。根据ECMScript实现所在的宿主环境不同,表示执行环境的对象也不一样。
每一个函数都有自己的执行环境。当执行流进一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返还给之前的执行环境。当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。
Closure(闭包)
闭包与函数有着紧密的关系,它是函数的代码在运行过程中的一个动态环境,是一个运行期的、动态的概念。
所谓闭包,是指词法表示包括不必计算的变量的函数。也就是说,该函数能够使用函数外定义的变量.。
在程序语言中,所谓闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。这些外部执行域的非持久型变量神奇地保留他们在闭包最初定义(或创建)时的值。