Javascript变量声明语法

时间:2013-10-13 17:12:30

标签: javascript arrays variable-declaration

我正在负责一个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().CustomConfigPathvar result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;

第一个似乎是parseQueryString函数的一种属性访问。

第二个似乎是一个数组声明,但没有Array()构造函数。此外,调用m值时,在while循环中没有假定的数组结果。

2 个答案:

答案 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循环中分配。