首页 > 代码库 > 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
4.2 执行环境及作用域
- 全局执行环境是最外围的执行环境。
- 在WEB浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。
- 执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。
- 全局执行环境直到应用程序退出(例如网页或浏览器关闭)时才会被销毁。
- 全局执行环境始终是作用域链的最后一个对象。
- 每个函数都有自己的执行环境。当执行流进入到一个函数时,函数的环境被推入一个环境栈中。函数执行之后,栈将其环境弹出,把控制权交给之前的执行环境。
5.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。