JavaScript 有用的代码片段和 trick(6)

格式化表单数据

function formatParam(obj) {
 var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
 for(name in obj) {
  value = obj[name];
  if(value instanceof Array) {
   for(i=0; i<value.length; ++i) {
    subValue = value[i];
    fullSubName = name + '[' + i + ']';
    innerObj = {};
    innerObj[fullSubName] = subValue;
    query += formatParam(innerObj) + '&';
   }
  }
  else if(value instanceof Object) {
   for(subName in value) {
    subValue = value[subName];
    fullSubName = name + '[' + subName + ']';
    innerObj = {};
    innerObj[fullSubName] = subValue;
    query += formatParam(innerObj) + '&';
   }
  }
  else if(value !== undefined && value !== null)
   query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
 }
 return query.length ? query.substr(0, query.length - 1) : query;
}
var param = {
 name: 'jenemy',
 likes: [0, 1, 3],
 memberCard: [
  { title: '1', id: 1 },
  { title: '2', id: 2 }
 ]
}
formatParam(param); // "name=12&likes%5B0%5D=0&likes%5B1%5D=1&likes%5B2%5D=3&memberCard%5B0%5D%5Btitle%5D=1&memberCard%5B0%5D%5Bid%5D=1&memberCard%5B1%5D%5Btitle%5D=2&memberCard%5B1%5D%5Bid%5D=2"

创建指定长度非空数组

在JavaScript中可以通过new Array(3)的形式创建一个长度为3的空数组。在老的Chrome中其值为[undefined x 3],在最新的Chrome中为[empty x 3],即空单元数组。在老Chrome中,相当于显示使用[undefined, undefined, undefined]的方式创建长度为3的数组。

但是,两者在调用map()方法的结果是明显不同的

var a = new Array(3);
var b = [undefined, undefined, undefined];
a.map((v, i) => i); // [empty × 3]
b.map((v, i) => i); // [0, 1, 2]

多数情况我们期望创建的是包含undefined值的指定长度的空数组,可以通过下面这种方法来达到目的:

var a = Array.apply(null, { length: 3 });
a; // [undefined, undefined, undefined]
a.map((v, i) => i); // [0, 1, 2]

总之,尽量不要创建和使用空单元数组。

以上所述是小编给大家介绍的JavaScript 有用的代码片段和 trick,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对黑区网络网站的支持!