1. DOM级别
1.1 DOM1级
由DOM核心(DOM Core)和DOM HTML两个模块组成。
- DOM核心:规定如何映射寄语XML的文档结构,以便简化对文档中任意部分的访问和操作。
- DOM HTML:在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法。
1.2 DOM2级
引入以下新模块:
- DOM视图(DOM Views)定义了跟踪不同文档视图的接口。
- DOM事件(DOM Events)定义了事件和事件处理的接口。
- DOM样式(DOM Style)定义了基于CSS为元素应用样式的接口。
- DOM遍历和范围:定义了遍历和操作文档树的接口。
2. 基本概念
2.1 语法
2.1.1 区分大小写
ECMAScript中一切都区分大小写。
2.1.2 标识符
第一个字符必须是字母,下划线,或美元符号$,其他可以是字母数字美元符号和数字。
ECMAScript采用 驼峰大小写格式
2.1.3 严格模式
处理ECMAScript3中一些不确定行为,对某些不安全操作抛出错误
function doSomething(){
"use strict"
//函数体
}
2.2 变量
function test() {
message = 'hi';//message是一个全局变量,不推荐,严格模式会报错
var str = 'lala';//str是局部变量
}
test();
console.log(message);
2.3 数据类型
ECMAScript有5种简单数据类型(基本数据类型):Undefined,Null,Boolean,Number,String,还有一种复杂数据类型:Object(一组无序的名值对)。
2.3.1 typeof操作符
检测数据类型,返回字符串:undefined,null,boolean,number,string,object,function
2.3.2 Undefined和Null类型
Undefined类型只有一个值即undefined。使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
var message;
alert(message == undefined); //true
Null类型也只有一个值null,null值表示一个空对象指针
var car = null;
alert(typeof car);//"object"
如果定义的变量准备将来用于保存对象,那么最好将其初始化为null。
2.3.3 Boolean类型和Number类型
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""空字符串 |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(not applicable不适用) | undefined |
负无穷(-Infinity)正无穷(Infinity)
NaN
NaN非数值(Not a Number)是一个特殊的数值,表示本来要返回数值的操作数未返回数值的情况,这样就不会抛出错误。ECMAScript中任何数值除以非数值都会返回NaN,其他编程语言中这样会报错。
- 任何涉及到NaN的操作都会返回NaN
- NaN与任何值都不想等,包括其本身
alert(NaN == NaN);//false
数值转换 Number(),parseInt(),parseFloat()
Number()可用于任何数据类型,后两个则专门用于把字符串转换成数值
var n1 = Number("hello world");//NaN
var n2 = Number("");//0
var n3 = Number("000012");//12
var n4 = Number(true);//1
parseInt()
var n5 = parseInt("1234blue");//1234
var n10 = parseInt("blue1234");//NaN
var n6 = parseInt("");//NaN 和Number()不同
var n7 = parseInt("0xA");//10
var n8 = parseInt(23.5);//23
parseFloat()只解析十进制数值
var n1 = parseFloat("1234blue");//1234
var n2 = parseFloat("0xA");//0
var n3 = parseFloat("22.34.5");//22.34
var n4 = parseFloat("3.12e7");//31200000
2.3.4 String类
字符串是不可变的
var str = "java";
str = str + "script";
上面例子第二行是先创建一个能容纳10个字符的新字符串,然后填入java和script,最后销毁原来的字符串java和字符串script。
toString()方法
var found = true;
alert(found.toString());"true"
var n = 10;
alert(n.toString());"10"
alert(n.toString(2));"1010"
alert(n.toString(8));"12"
alert(n.toString(16));"a"
调用数值的toString()方法时,可以传递一个参数:输出数值的基数。
2.3.5Object类型
ECMASript中的对象就是一组数据和功能的集合
var o = new Object();
Object的每个实例具有以下属性和方法:
- constructor:保存着用于创建当前对象的函数。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。eg:o.hasOwnProperty("name");
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。
- toLocalString(),toString(),valueOf().
3.变量,作用域和内存问题
3.1 基本类型和引用类型的值
3.1.1复制变量的值
var n1 = 5;
var n2 = n1;
复制基本变量,n1中的5和n2中的5完全独立,此后两个变量参与任何操作都互不影响。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "lala";
console.log("obj1.name:" + obj1.name);//lala
console.log("obj2.name:" + obj2.name);//lala
obj2.name = "hello";
console.log("obj1.name:" + obj1.name);//hello
console.log("obj2.name:" + obj2.name);//hello
当复制引用类型的值时,存储在obj1对象中的值复制一份到新变量obj2中,但obj2实际是一个指针,这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,会影响到另一个变量。
3.2 垃圾收集
3.2.1标记清除
JavaScript中最常用的垃圾收集方式。当变量进入环境时(例如,在函数 中声明一个变量),就将这个变量标记为进入环境。从逻辑上讲,永远不能释放进入环境的变量所占的内存。当变量离开环境时,则将其标记为离开环境。
网友评论