日期:2014-05-16 浏览次数:20438 次
变量分为基本类型和引用类型,分别位于栈内存和堆内存中。可以给引用类型添加属性。引用类型和Java的对象引用是一个意思,函数传递也是一样的,其实就是个地址。检测类型使用 instanceof。注意null is instanceof Object
执行环境及作用域链,这个和C/C++没什么区别,只是要注意最外部的是全局环境,在其他环境中总有一个arguments对象。 延长作用域链的两种情况: try-catch的catch中带有包含被抛出的错误对象的声明,with语句中包含添加对象。这些变量都是只读的,因此在这些语句中声明的变量都会被添加到所在执行环境中去。另外,js没有块级作用域! 如果初始化一个没有声明的变量,该变量会被添加到全局环境。js垃圾收集与java是一样的。
Object类型。
可以用构造函数 new Object()定义,也可以用 对象字面量。对象属性可以用.访问,也可以用方括号语法,方括号语法可以用将属性放在变量中。
function displayPerson(args){ var output = ""; if(typeof args.name == "string") { output += "Name: " + args.name + "\n"; } if(typeof args.age == "number"){ output += "Age: " + args.age + "\n"; } var person = { name: "hHenry", age: 20
}; var mike = { name: "Mike" }; displayPerson(henry); displayPerson(mike);
Array类型。
可以用new Array(number) 或者new Array("", "", ...)或者数组字面量(方括号表示)定义。Array的length属性不是只读的,可以通过修改这个属性改变数组长度。
输出方法 toString,join
栈方法 push,pop
队列方法 push,shift (unshift)
排列方法 reverse,sort//sort方法默认总是将比较对象转换为string的,所以要自定义比较函数
修改方法 不影响原数组:concat,slice;影响原数组:splice
Date类型。
注意:使用UTC自1970/1/1毫秒数保持日期。主要方法 getTime,getFullYear,getMonth,getDate,getDay,getHours,getMinutes,getSeconds,getMilliseconds
RegExp类型。
可以用字面量 var exp /pattern/flags或者构造函数new RegExp("pattern", "flags")定义。
RegExp实例属性:global, ignoreCase, lastIndex, multiline, source
RegExp实例方法:exec(str):返回包含第一个匹配信息的数组或者null,数组包含各个分组匹配字符串,还有额外属性 index和input
Function类型。
函数也是类型,函数名其实也只是个地址。注意:解析器会率先读取函数声明,这一点会显示出函数声明与函数表达式的唯一区别。可以将函数作为函数返回值(js中的对象和java中的对象是一样的,保持在堆区,采用标记回收策略,所以返回后依然是可以使用的)。函数内部属性:arguments和this。arguments.callee是一个指针,指向拥有arguments对象的函数,这样就将函数与函数名解耦合了。this是函数据以执行操作的对象,也就是执行时所处的作用于。apply和call方法第一个参数指定作用域执行函数,将对象与方法解耦合。java将方法与对象紧密联系,称方法为对象所有,是对象的外部接口。而js中根本没有对象的概念,只是一个作用域的问题。
基本包装对象。
只需注意一点:包装成了对象,自然就成了对象,所以在使用typeof/instanceof/比较的时候都要看做是对象。
字符串的一些操作,特别是 match, replace需要注意一下。
var text = "cat, fat, bat"; result = text.replace(/(.at)/g, 'word ($1)'); alert(result);
function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match, pos, orginalText){ switch(match) { case "<": return "<"; case ">": return ">"; case "&": return "&";