我正在负责一个javascript webapp。它非常复杂,我在语法方面遇到了一些麻烦:
getThemeBaseUrl = function() {
var customConfigPath = "./customer-configuration";
if (parseQueryString().CustomConfigPath) {
customConfigPath = parseQueryString().CustomConfigPath;
}
var clientId = parseQueryString().ClientId;
return customConfigPath + "/themes/" + clientId;
};
parseQueryString = function() {
var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;
while ( m = re.exec(queryString)) {
result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
return result;
};
特别是parseQueryString().CustomConfigPath
和var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;
第一个似乎是parseQueryString函数的一种属性访问。
第二个似乎是一个数组声明,但没有Array()构造函数。此外,调用m
值时,在while循环中没有假定的数组结果。
答案 0 :(得分:0)
看看:
parseQueryString().CustomConfigPath
你可以说parseQueryString()
应该返回一个CustomConfigPath
属性的对象。
从此:
var result = {};
你看到result
确实是一个对象({}
是一个空对象文字)。 它不是数组。稍后,在循环中,有:
result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
所以我们将属性分配给result
对象。其中一个属性(我们可以预期)为CustomConfigPath
。这将取自查询字符串 - 我们将使用正则表达式执行此操作:re = /([^&=]+)=([^&]*)/g
。因此,执行此代码的网页的地址如下:http://example.com/something?SomeKey=value&CustomConfigPath=something
。
为对象分配属性的一般语法是:
result[key] = value;
// key -> decodeURIComponent(m[1])
// value -> decodeURIComponent(m[2])
答案 1 :(得分:0)
parseQueryString().CustomConfigPath
调用parseQueryString
函数,该函数返回一个对象。然后它访问该对象的CustomConfigPath
属性。该函数前4行的常用习语是:
var customConfigPath = parseQueryString().CustomConfigPath || "/.customer-configuration";
var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m
是4个不同变量的声明,而不是数组:
result
是一个空对象queryString
是当前网址中的查询字符串,删除了?
。re
是正则表达式m
是未初始化的变量,稍后将在while
循环中分配。