javascript中replace( )方法的利用——有博主已经讲过了,但里面有一小丢丢知识错误,挺主要的片段,笔者就重提下,以防初学者弄错

Ali面试题:说出以下函数的功效是?空白区域应该填写什么?

实际上这些题材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部分,也就是第三5行初始。首先申明变量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能够是字符串,也足以是函数。Ali的那些难题里就是用的函数。在那种景色下,种种匹配都调用该函数,它回到的字符串将替换文本使用。

前面包车型大巴始末正是本文一发轫波及原博有误的地方,但是这几个地点很要紧。

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项和第①1项都以不设有的,所以就赶回空字符。

 

本条标题里知识点确实相比较多,小编也以为温馨许多地点没说到,不晓得我们能或不可能精晓,有题目欢迎评论,咱能够再商讨。

本文有误之处,希望大家及时建议,不吝赐教,多谢。

 

 

 

ECMAScript,