Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未知的JavaScript语法_Javascript_Syntax - Fatal编程技术网

未知的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

所以我是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 = 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
    的回调函数中)

  • []
    :字符的集合。下一个字符(在百分比后面)