ECMAScriptjavascript中replace( )方法的行使——有博主就说了了,但中间有一样不怎么丢丢知识错误,挺重要的一些,我就再也提下,以免初家将错

阿里面试题:说生以下函数的意向是?空白区域应填什么?

其实这个题材http://www.phpstudy.net/b.php/105983.html分解的已经杀好了,思路为死顺,容易理解,本文将会再凑巧有客的左,也会见加加有有关本题更细节的解释。

 1 // define    
 2 (function (window) {    
 3     function fn(str) {    
 4         this.str = str;    
 5     }    
 6     fn.prototype.format = function () {    
 7         var arg = ______;    
 8         return this.str.replace(_______, function (a, b) {    
 9             return arg[b] || '';    
10         });    
11     }    
12     window.fn = fn;    
13 })(window);    
14 // use    
15 (function(){    
16     var t = new fn('<p><a href="{0}">{1}</a>{2}</p>');  
17     console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') );    
18 })();  

1.
 第一我们看use部分,也就是第15实行开始。首先声明变量t=new fn(),
这里调用了fn函数,根据fn函数内容,运行结果虽是以'<p><a
href=”{0}”>{1}</a><span>{2}</span></p>’赋值给this.str。

2.
console.log()函数其实是用结果显示在浏览器的控制台上。浏览器中(Chrome,
IE, Firefox) 使用 F12 来启用调试模式, 在调试窗口中击 “Console”
菜单。

3.
t.format()也是函数调用,调用6到11履行之函数。函数里的内容是咱们研究之重点:首先是变量声明,arg是英语单词argument的缩写。由于arg不是数组,而是一个类数组对象,所以我们用开展一些转移。

 var
arg=Array.prototype.slice.call(arguments,0); 

等式右边便是题材中首先个横线处应该填的内容。这词代码里之0是好简单的,因为默认是0,感兴趣的交换1尝试,就理解她的义。关于这代码理解但是参考http://www.cnblogs.com/anncesky/articles/1982540.html,anncesky博教授的老大清楚。

4.
连着下去replace()函数,replace函数的语法:stringobject.replace(regexp/substr,replacement)。意思就是是故replacement把regexp/substr替换掉。

题目中凡想念把诸如{0}这样的还替换掉,当然就是得用regexp正则表达式了,substr字符串子串显然是举行不顶之。此处应该填/\{(\d+)\}/g。正则表达式是个小微复杂的物了,想知道的好参见http://www.cnblogs.com/realcare/p/6028622.html。

ECMAScript规定,replacement可以是字符串,也得以是函数。阿里底此题材里就是之所以之函数。在这种情形下,每个匹配都调用该函数,它回到的字符串将替换文本以。

背后的情即是本文一开始干原博有误的地方,可是这个地方特别要紧。

replacement有四只参数。第一只参数表示相当到之字符,第二个参数表示相当配regexp对象中某个圆括号子表达式的字符串,可能是0个或多个这样的参数,第三只参数表示相当到的子字符串在字符串中启匹配岗位,第四单参数是乘调用replace方法的字符串。

还什么意思呢,咱们跑一下代码,让其输出一下便知道了:我把题目代码稍微改变一下,让大家更明亮地圈下参数代表的含义。

 1 // define    
 2 (function (window) {    
 3     function fn(str) {    
 4         this.str = str;    
 5     }    
 6     fn.prototype.format = function () {    
 7         var arg = Array.prototype.slice.call(arguments,0);    
 8         return this.str.replace(/\{(\d+)\}/g, function (a,b,c,d) {
 9             console.log(a);
10             console.log(b);
11             console.log(c);
12             console.log(d);
13             return arg[b] || '';    
14         });    
15     }    
16     window.fn = fn;    
17 })(window);    
18 // use    
19 (function(){    
20     var t = new fn('<p><a href="{000}">{11}</a>{2}</p>');  
21     console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') );    
22 })(); 

 

a,b,c,d分别是replacement的季只参数,另外我改变了fn的实参,fn(‘<p><a
href=”{000}”>{11}</a><span>{2}</span></p>’),因为这里原博理解错了,我就是强调下,以免初拟的对象干错。

运作结果:

ECMAScript 1

及图被革命部分是我手动加的,以便大家知晓。这样四个参数的意义就是顶明确了吧。所以呀,要庆幸题目中fn里特别老实的凡{0}{1}{2},不然运行结果尚且是错的。

return arg[b] ||
”;就是返回参数的第b起或空字符。可以观看本人者改了的顺序里,第000项与第11项都是休在的,所以便回到空字符。

 

这题目里知识点确实于多,我吗认为好多地方没有说及,不知晓大家会免能够清楚,有问题欢迎评论,咱可另行谈谈。

本文有误之处,希望大家立即指出,不吝赐教,谢谢。