JavaScript高级程序设计前四章

作者: danr小胖 | 来源:发表于2017-05-03 20:41 被阅读33次

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中最常用的垃圾收集方式。当变量进入环境时(例如,在函数 中声明一个变量),就将这个变量标记为进入环境。从逻辑上讲,永远不能释放进入环境的变量所占的内存。当变量离开环境时,则将其标记为离开环境。

3.3.2 管理内存

相关文章

网友评论

    本文标题:JavaScript高级程序设计前四章

    本文链接:https://www.haomeiwen.com/subject/cpgktxtx.html