未知的JavaScript语法
所以我是javascript的新手,我遇到了这样一个问题:未知的JavaScript语法,javascript,syntax,Javascript,Syntax,所以我是javascript的新手,我遇到了这样一个问题: /** * Replaces %1, %2 and so on in the string to the arguments. * * @method String.prototype.format * @param {Any} ...args The objects to format * @return {String} A formatted string */ String.prototype.format = f
/**
* Replaces %1, %2 and so on in the string to the arguments.
*
* @method String.prototype.format
* @param {Any} ...args The objects to format
* @return {String} A formatted string
*/
String.prototype.format = function() {
var args = arguments;
return this.replace(/%([0-9]+)/g, function(s, n) {
return args[Number(n) - 1];
});
};
你们能帮我弄明白这两件事是什么意思吗
首先,我不明白“var args=arguments;”中的“arguments”应该是什么,它是什么类型?我不明白它在这里做什么。
其次,“/([0-9]+)/g”是什么?我一点也不明白。
第三,这些函数是如何做到它所说的那样的呢?我对这一切感到困惑。
谢谢大家! 参数对象是为每次函数调用创建的特殊对象。请在以下网站上阅读更多信息:
arguments
对象是所有(非箭头)函数中可用的局部变量。可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的一个条目,第一个条目的索引从0开始
/%([0-9]+)/g
是一个文本。这些文本通过它们的/
分隔符来区分,就像引号表示字符串文本一样。正则表达式本身就是一种语言,也可以在其他语言环境中使用。它们用于查找字符串中的模式,因此是一种比.indexOf
更强大的搜索方式。在报纸上读到它
下面是该正则表达式的分解:
:分隔符:这不是正则表达式的一部分,只是告诉Javascript这是正则表达式文本/
:将匹配文字百分比符号%
:捕获组。这些括号内的模式匹配的内容稍后可以作为单独的字符串值检索(在本例中,在传递给()
的回调函数中)replace
:字符的集合。搜索字符串中的下一个字符(在百分比符号之后)应该是其中之一[]
:一个数字[0-9]
:上一个模式可以出现多次,但至少出现一次。所以在这种情况下,应该至少有一个数字,但允许更多+
:这是正则表达式的一个修饰符,将使其匹配模式的所有匹配项,而不仅仅是第一个匹配项g
this
,它是调用此格式
方法的字符串。只有在调用函数时才知道哪个字符串
replace
方法可以将正则表达式作为其第一个参数,在本例中,它查找以百分比符号开头,后跟无符号整数的模式
在该代码中,replace
方法也会得到一个值。将为字符串中找到的每个匹配项调用此函数。该字符串返回的值将用作找到内容的替换字符串。因此,这意味着所有这些%nn
子字符串将被从参数
对象中获取的内容替换
在这种情况下,调用回调函数时使用两个参数:第一个是匹配的字符串,例如%1
,第二个是第一个捕获组(请参见正则表达式中的括号):这与第一个参数相同,但没有%
Number
函数将数字字符串转换为数字。由于%1
应该引用第一个参数,并且第一个参数的索引为0,因此必须从该数字中减去一个,以便在args
类数组对象中获得正确的索引
调试
您可以在该代码中放置一些console.log()
语句,以便更好地掌握正在发生的事情,例如:
String.prototype.format=function(){
var args=参数;
log('arguments:',JSON.stringify(args));
log('要处理的字符串:'+this);
返回此。替换(/%([0-9]+)/g,函数(s,n){
console.log('found:',s',带有数字,n);
log('将其替换为索引处的参数:',(编号(n)-1),'whichis',args[Number(n)-1]);
返回参数[编号(n)-1];
});
};
//运行上述方法
var result=“我的名字是%1,我是%2岁。”.format(“Maria”,24岁);
console.log('最终结果:',结果)代码>参数对象是为每次函数调用创建的特殊对象。请在以下网站上阅读更多信息:
arguments
对象是所有(非箭头)函数中可用的局部变量。可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的一个条目,第一个条目的索引从0开始
/%([0-9]+)/g
是一个文本。这些文本通过它们的/
分隔符来区分,就像引号表示字符串文本一样。正则表达式本身就是一种语言,也可以在其他语言环境中使用。它们用于查找字符串中的模式,因此是一种比.indexOf
更强大的搜索方式。在报纸上读到它
下面是该正则表达式的分解:
/
:分隔符:这不是正则表达式的一部分,只是告诉Javascript这是正则表达式文本
%
:将匹配文字百分比符号
()
:捕获组。这些括号内的模式匹配的内容稍后可以作为单独的字符串值检索(在本例中,在传递给replace
的回调函数中)
[]
:字符的集合。下一个字符(在百分比后面)