理解javascript代码

理解javascript代码,javascript,Javascript,我再次来到这里是为了帮助理解这段代码,函数在没有任何参数的情况下被调用 var d= $_GET(); 这怎么会发生?为什么regexp返回三个值,因为我们有m,键值? ifparam和在对象中创建param键的目的是什么? 请告诉我,如果有任何聊天,我可以得到快速帮助,而不是张贴每个问题,我有那里 function $_GET(param) { var vars = {}; window.location.href.replace( /[?&]+([

我再次来到这里是为了帮助理解这段代码,函数在没有任何参数的情况下被调用

var d= $_GET();
这怎么会发生?为什么regexp返回三个值,因为我们有m,键值? ifparam和在对象中创建param键的目的是什么? 请告诉我,如果有任何聊天,我可以得到快速帮助,而不是张贴每个问题,我有那里

function $_GET(param) {
    var vars = {};
    window.location.href.replace( 
        /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
        function( m, key, value ) { // callback
            vars[key] = value !== undefined ? value : '';
        }
    );

    if ( param ) {
        return vars[param] ? vars[param] : null;    
    }
    return vars;
}
这怎么会发生

因为在JavaScript中,不管一个函数声明多少个参数,都可以用更多或更少的参数调用它。如果它声明了一个参数,而您调用它时没有给出该参数,那么参数的函数值将是未定义的,这是一个特定的实值参数以及变量和属性可以具有的值

为什么regexp返回三个值,因为我们有m,键值

正则表达式包括两个捕获组,其中包含两个部分。使用正则表达式和回调函数时定义Stringreplace的方式是,它将使用与表达式整体匹配的所有文本作为第一个参数m调用函数,可能是为了匹配,然后使用包含与捕获组匹配的文本的附加参数。更简单的例子:

"testing".replace(/te(..)(...)/, function(m, c0, c1) {
    // m  = "testing"
    // c0 = "st", the characters that matched the first capture group
    // c1 = "ing", the characters that matched the second capture group
});
ifparam和在对象中创建param键的目的是什么

if param测试param参数的值是否真实。在JavaScript中,当用作布尔值时强制为true的值称为truthy,强制为false的值称为false。falsey值是未定义的、null、0、NaN,当然还有false。因此,if param检查param是否包含一个不是这些值之一的值

如果param是truthy,则代码假定它是一个字符串或可以强制为string的东西,并从具有该名称的变量返回属性(如果有并且它是truthy);否则返回null

如果param是false,就像调用$\u GET时完全没有param一样,因为undefined是false,所以它只返回vars


基本上,_GET用于解析查询字符串参数,或者返回一个包含所有参数的对象,或者返回通过传入param命名的特定对象。

但是您有什么解决方案吗?非常惊讶有两个反对票。至少提供一个类似下面的解决方案,这样我们就可以将param用作id,还是我完全错了?我不明白这是怎么回事point@EduardHasanaj:作为id是什么意思?@EduardHasanaj:在vars[param]中,param用于查找属性。在JavaScript中,可以通过两种方式访问属性:使用带有文字符号和dot obj.foo的标识符,以及使用带有括号符号obj[foo]的字符串。在括号表示法中,字符串可以是任何表达式的结果,包括变量查找。因此obj.foo、obj[foo]和var x=f;然后obj[x+o+o]全部访问obj的foo属性。vars[param]就是这样。但是为什么我们需要它来识别某些东西呢?@EduardHasanaj:这个函数设计用来做两件事之一:如果不给它一个param,则返回所有查询参数;如果给它一个param,则只返回其中一个。