RegExp对象的主要方法是exec(),exec()接收一个参数,即要应用模式的字符串,返回一个匹配项(即使设置了g标志),有没有设置g标志的差别在于,没有设置则总是返回同一个结果,设置了则返回下一个匹配
test方法,接收一个字符串,只返回是否匹配,不返回结果
Function类型
函数是对象,函数名是指针
定义方法:
//函数声明的形式 function sum(num1,num2){ return num1 + num2; } //函数表达式的形式 var sum = function(num1,num2){ return num2 + num2; } var sum = new Function(“num2”,”num2”,”return num1 + num2”); //不建议,性能渣,但能更好的理解函数是对象的思想。 function add(num){ return num + 100; } function add(num1,num2){ return num + 200; } //实际如同下面的代码 function add(num){ return num + 100; } add = function(num){ return num + 200; }
所以函数没有重载。
函数内部属性
函数内部有两个特殊对象,arguments和this
arguments有一个属性callee,指向拥有这个arguments的函数
定义递归函数时,最好使用arguments.callee()来代替函数名,降低耦合,减少问题的出现
例:
function factorial(num){ if(num<1) return 1; else return num * factorial(num – 1); } function factorial(num){ if(num<1) return 1; else return num * arguments.callee(num – 1); }
this对象
函数的this对象引用的是函数据以执行的环境对象
ECMAScript5规范定义了另一个函数对象的属性:caller,保存着调用当前函数的函数的引用
函数包含了两个属性:length(希望接收的函数个数)和prototype,prototype不可枚举,所以for-in无法发现他。prototype是所有引用类型保存其所有实例方法的真正所在
包含两个非继承而来的方法:apply和call
apply方法接收两个参数:一个是在其中运行函数的作用域,也就是this对象,一个是参数数组,可以是Array实例,也可以是arguments对象
call与apply基本相同,区别在于,使用call函数,参数必须逐个列举出来
传递参数并非apply和call真正用武之地,真正强大的地方在于能够扩充函数的作用域
例:
window.color = “red”; var o = {color:”blue”}; function sayColor(){ alert(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue
不需要再将sayColor函数放到o对象中,就可以使o对象能够使用sayColor函数
ECMAScript5还定义了另一个方法:bind,这个方法会创建一个函数实例,其this值会被绑定到传给bind函数的值
window.color = “red”; var o = {color:”blue”}; function sayColor(){ alert(this.color); } var objSayColor = sayColor.bind(o); objSayColor(); //blue
toLocaleString和toString始终返回函数代码,但由于浏览器差异,并没有办法根据返回结果实现任何重要功能,valueOf也只返回函数代码
基本包装类型
Boolean、Number、String
对基本包装类型的实例调用typeof会返回object,而且所有的基本包装类型的实例都会返回true,
Object构造函数也会像工厂方法一样,根据传入的值的类型返回响应的基本包装类型的实例
例:
var obj = new Object(“some text”); alert(obj instanceof String); //true
使用new调用基本包装类型和直接使用同名的转型函数是不一样的。例:
var value = “25”; var num = Number(value); //转型函数 alert(typeof num); //”number” var obj = new Number(value); //构造函数 alert(typeof obj); //”object”
Number类型
另外提供的方法
toFixed();接收一个参数,表示要以几位小数表示当前值,当前小数位过长则四舍五入,此方法可以表示带有0到20个小数位的数值,这只是标准实现范围
toExponential();接收一个参数,返回指数形式表示,参数指定返回的结果中的小数位数
toPrecision();接收一个参数,表示所有数字的位数,不包括指数部分
string类型