JavaScript高级程序设计(第三版)学习笔记1~5章(5)

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类型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgyfdp.html