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