首页 > 代码库 > Javascript高级程序设计学习笔记

Javascript高级程序设计学习笔记

 

3. 基本概念

  • 基本数据类型:Undefined,Null,Boolean,Number,String.
  • 复杂数据类型:Object.

3.6 语句

  • switch比较值时用的是全等运算符 “===” ,因此不会进行类型转换。例如 “10” 不等于10. 

3.7 函数

  • ECMAScript函数不介意传递进来多少个参数,也不在乎参数的类型。即使定义的函数只接受两个参数,在调用的时候也可以传递任意多个或者0个。因为ECMAScript的参数在内部是用一个数组表示的,在函数体内部可以通过arguments对象访问这个参数数组。arguments对象与数组类似,但并不是Array的实例。
  • 全局变量window没有arguments对象。
  • ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。
  • 没有真正的重载,定义两个同名的函数,第二个函数会覆盖第一个。但是可以通过检查传入函数中参数的类型和数量来模拟重载。

4. 变量、作用域和内存问题

 

4.1 基本类型和引用类型的值

  • ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
  • Javascript不允许直接访问内存中的位置,不能直接操作对象的内存空间。
  • 操作对象时,实际上是在操作对象的引用,而不是实际的对象。(说法并不严密:当复制保存着的某个对象时,操作的是对象的引用,指向的是同一个对象。但在为对象添加属性时,操作的是实际对象。)
  • 基本类型是按值访问的,引用类型是按引用访问的。 
  • ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。
    • function set(obj){    obj.name="nini";    }var person = new Object();set(person);console.log(person.name);//输出“nini”
      function set(obj){    obj.name="nini";    obj = new Object();    obj.name = "gigi"    }var person = new Object();set(person);console.log(person.name);//输出“nini”
      //当在函数内部重写obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕之后立即被销毁。
      //如果参数是按引用传递的话,应该输出gigi,而函数实际输出了nini,证明是按值传递。

 

  • 可以把ECMAScript函数的参数想象成局部变量。

  • typeof 检测变量数据类型:
    •       var u;
    •       typeof "gigi";               //   string
    •       typeof 22;                      //   number
    •       typeof true;                    //   boolean
    •       typeof u;                        //   undefined
    •       typeof null;                     //   object
    •       typeof (new Object());     //   object

    检测基本类型时,typeof用处很大,但在检测引用类型的值时,用处不大,因为array、object等类型都会返回object,function返回function,RegExp在chrome浏览器中返回function,在IE和Firefox中返回object。

  • 所有引用类型值都是Object的实例。
  • 引用类型值 instanceof Object    //返回TRUE        基本类型值 instanceof Object   //返回FALSE
    •   [1,2,3] instanceof Array    //true
    •   [1,2,3] instanceof Object   //true
    •       (/[0-9]/g) instanceof RegExp   //true
    •       (/[0-9]/g) instanceof Object    //true

 

4.2 执行环境及作用域

  • 全局执行环境是最外围的执行环境。
  • 在WEB浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。
  • 执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。
  • 全局执行环境直到应用程序退出(例如网页或浏览器关闭)时才会被销毁。
  • 全局执行环境始终是作用域链的最后一个对象。
  • 每个函数都有自己的执行环境。当执行流进入到一个函数时,函数的环境被推入一个环境中。函数执行之后,栈将其环境弹出,把控制权交给之前的执行环境。

5.