- ECMAScript就是对实现该标准规定的各个方面内容的语言的描述,它规定了这门语言的下列组成部分:语法、类型、语句、关键字、保留字、操作符、对象。
- DOM的作用是把页面映射为一个多层节点结构,开发人员通过DOM提供的API对HTML页面的节点进行增删改等操作。
- BOM从根本上讲只处理浏览器窗口和框架。
- 虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 JavaScript 的含义却比 ECMA-262 中规定的要多得多。一个完整的 JavaScript 实现应该由下列三个不同的部分组成:
核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM) - DOM并不只是针对JavaScript的,很多别的语言也都实现了DOM。
- <script>属性:
async: 异步加载
defer: 立即下载、延迟执行 - 相对于嵌入JavaScript代码,使用外部JavaScript文件的优点有可维护性好、优化页面加载速度(由于浏览器的缓存机制,如果俩个页面都使用同一个文件,那么只需下载一次)
- <noscript>用于在不支持JavaScript的浏览器中显示替代的内容。
- 文档模式:混杂模式、标准模式和准标准模式。
ECMAScript中的一切(变量、函数名和操作符)都区分大小写。 - ES5中引入了严格模式的概念,在顶部添加代码:"use strict" 即可启用。
alert(null == undefined); // true
- Number()可以把任何数据类型转换为数值,parseInt()和parseFloat()可以把字符串转换为数值。
- 全等”===”只在两个操作数未经转换就相等的情况下返回true。
14.ECMAScript 中的对象其实就是一组数据和功能的集合。
15.break 和 continue 语句用于在循环中精确地控制代码的执行。其中,break 语句会立即退出循环,强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。
var num = 0;
for (var i=1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
alert(num); //4
16.break 和 continue 语句都可以与 label 语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生在循环嵌套的情况下,如:
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //55
- 使用var操作符定义的变量为该变量作用域中的局部变量,省略var将会创建一个全局变量(不推荐,严格模式下报错)。
- 数据类型:ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。
- ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中——在大多数浏览器中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。
- arguments 对象只是与数组类似(它并不是 Array 的实例),因为可以使用方括号语法访问它的每一个元素(即第一个元素是 arguments[0],第二个元素是 argumetns[1],以此类推),使用 length 属性来确定传递进来多少个参数。
- NaN是一个特殊的数值,isNaN()函数用于判断一个值是否为数字,例如字符串"10"或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。
- Object的每个实例都具有下列属性和方法:
constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
由于在ECMAScript中Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。
var obj1 = new Object();
var obj2 = obj1;
像这样复制引用类型的值时,其实只是相当于复制了一个指针,俩个变量指向的是同一个对象,所以当为obj1添加新的属性时,obj2也可以访问这个新属性。不仅在变量中如此,在函数的传参时,也遵循相同的原理。
- typeof()一般用来检测基本数据类型,instanceof()用来检测Object属于什么类型的对象。
- 在执行try-catch语句的catch块或执行with语句时,会在作用域链的前端临时增加一个变量对象。
- JavaScript具有自动垃圾收集机制,最常用的是标记清楚。不过IE9之前COM对象的垃圾收集机制采用的是引用计数策略,因此当在IE9之前涉及COM对象,就会有循环引用的问题。
- 合理利用垃圾收集机制还可以做到优化浏览器性能,比如在程序中,一旦有数据不再有用,可以将其设置为null来释放它的引用,这种解除引用的方法适用于大多数全局变量和全局对象的属性,解除引用后,数据脱离了执行环境,下次垃圾收集器运行时便会将其回收,从而达到释放内存的优化目的。
- 在WEB浏览器中,全局执行环境被认为时window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。
- 作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。