zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计4.pdf

    虽然执行环境的类型总共只有两种——全局和局部(函数),但还有其他方法延长作用域链,有些语句可以在作用域链的前端临时增加一个变量对象,执行后会被移除try-catch语句的catch块和with语句

    with语句会将指定对象添加到作用域链中,catch会创建一个新的变量对象

    function buildUrl ()

    {

    var qs="?debug=true";

    with (location)

      {

      var url=href + qs;

      }

    return url;

    }

    在此,with语句接受的是location对象,因此其变量对象就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域链的前端。

    JavaScript没有块级作用域

    if (true)

    {

    var color="blue";

    }

    alert(color);  //"blue"

    if语句的变量声明会将变量添加到当前执行环境(这里是全局执行环境)

    由for语句创建的变量 i 即使在for循环结束后依然存在与循环外部的执行环境中

    1声明变量如果没有使用var,该变量会自动添加到全局环境 

    2查询标识符由当前执行环境开始搜索

    找出那些不再继续使用的变量,然后释放其占用的内存

    常见的是 标记清除 进入环境标记,离开环境清除

    引用计数 是跟踪记录每个值被引用的次数

    对循环引用使用手工消除的方式myObject.element=null;element.someObject=null;

    对数据的值设置null叫做解除引用,适用大多数全局变量和全局变量的属性,局部变量会在他们离开执行环境后被解除引用

    第5章  引用类型

    引用类型的值(对象)是引用类型的一个实例,在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起

    新对象是使用new操作符后跟一个构造函数来创建的var person = new object();

    Object的实例是存储和传输的理想选择

    创建Object有两种方式:

    第一种是new操作符后跟Object构造函数

    var person = new Object();

    person.name = "Nicholas";

    person.age = 29;

    另一种方式是使用对象字面量表示法,它是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程

    var person =

    {

    name:"Nicholas",

    age:29

    };

    ECMAScript中的表达式上下文指的是能够返回一个值(表达式),左花括号表示一个表达式或者代码块的开始

    对象字面量也是向函数传递大量可选参数的首选方式

    function displayInfo (args)

    {

      var output="";

      if(typeof args.name=="string")

        {

        output +="Name: "+args.name+ " ";

        }

      if(typeof args.age=="number")

        {

        output +="Age: "+args.age+ " "

        }

      alert(output);

    }

    displayInfo({

        name:"Ncholas",

        age:29

        });

    displayInfo({

        name:"Greq"

        });

    一般来说,访问对象的属性都是点表示法,也是很多面向对象语言中通用的语法,在JavaScript中也可以使用方括号表示法来访问对象的属性,将访问的属性以字符串的形式放在方括号中

    alert(person.name)  //"Nicholas"

    alert(person.["name"])  //"Nicholas"

    方括号语法主要优点是可以通过变量来访问属性

    var propertyName="name";

    alert(person[propertyName]);//"Nicholas"

    如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法

    person["first name"]="Nicholas";  //由于"first name"包含一个空格,所以不能使用点表示法来访问

    创建数组的基本方式有两种,第一种是使用Array构造函数

    var colors= new Array();

    如果预先知道数组的要保存的项目数量

    var colors= new Array(20); //自动创建length值为20的数组

    也可以向Array构造函数传递数组中应该包含的项

    var colors= new Array("red","blue","green");

    创建数组的第二种基本方式是使用数组字面量表示法 由一些包含数组项的方括号表示,多个数组项之间以逗号隔开

    var colors= ["red","blue","green"];

    var name= [];

    var value= [1,2,]    //在最后一个数组项加逗号会导致创建一个包含2或3项的数组

    在读取和设置数组的值时,要用方括号并提供基于0的数字的索引

    var color= ["red","blue","green"];  //定义

    alert(colors[0]);    //读取

    color[1]="black";    //修改

    color[3]="gray";    //新增

    数组的length是可读写的,通过设置这个属性可以向数组移除或者添加新项

    var colors=["red","blue","green"];

    colors.length=2;

    alert(colors[2]);    //undefined

    var colors=["red","blue","green"];

    colors[colors.length]="black";    //添加第3项

    colors[colors.length]="gray";    //添加第4项

    var colors=["red","blue","green"];

    colors[99]="black";

    alert(colors.length);    //100

    检测数组

    一般可以使用if (value instanceof Array)

    {

    //对数组的操作

    }

    instanceof操作符的问题在于,它假定单一的全局执行环境,如果网页包含多个框架就有多个不同的执行环境,就有多个不同版本的Array构造函数

    为了解决这个问题ECMAScript5新增了Array.isArray()方法,这个方法能确定某个值到底是不是数组,而不管是在哪个全局执行环境中创建的

    if(Array.isArray(value))

    {

    //对数组的操作

    }

    转换方法

    所有对象都具有toLocaleString()、toString()、valueOf()方法

    var colors=["red","blue","green"];

    alert(colors.toStrings());  //red,blue,green

    alert(colors.valueOf());  //red.blue,green

    alert(colors);  //red,blue,green

    var person1=

    {

      toLocaleString:function()

        {

          return "Nikolaos";

        },

      toString:function()

        {

          return"Nicholas";

        }

    };

    var person2=

    {

      toLocaleString:function()

        {

          return"Grigorios";

        },

       toString:function()

        {

          return"Greg";

        }

    };

    var people = [person1,person2];

    alert(people);

    alert(people.toString());

    alert(people.toLocaleString());

    join()方法可以使用不同的分隔符来构建这个字符串

    var colors=["red","blue","green"];

    alert(colors.join(","));  //red,green,blue

    alert(colors.join("||"));  //red||green||blue

    栈是一种LIFO(Last-In-First-Out后进先出)数据结构,栈中项的推入和移除只在栈的顶部发生,ECMAScript为数组提供push()和pop()方法实现类似的功能

    var colors=new Array();

    var count=colors.push("red","green");  //推入两项

    alert(count);  //2

    count=colors.push("black");  //推入另一项

    alert(count);  //3

    var item=colors.pop();

    alert(item);  //"black"

    alert(colors.length);  //2

    -------------------------------------------今天任务没完成,欠债的感觉不好受,还要付出更多的时间才行呐,好惆怅好忧伤-----------------------------------------------------

  • 相关阅读:
    komodo install on ubuntu
    关于scrapbook的导入导出
    hg常用命令小记

    在cygwin使用python
    命运多cuai
    常用shell命令
    360做电视广告了
    ubuntu im安装
    ubuntu下的路径
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/3644906.html
Copyright © 2011-2022 走看看