wfquery
Version:
like jQuery but just for new browser
126 lines (119 loc) • 4.4 kB
JavaScript
/**
* @file 基本数据操作相关方法, 核心依赖
* @author shiyangyang(shiyangyang@baidu.com)
* @namespace wfquery/ajax
*/
wfQuery.extend({
/**
* 去除字符串收尾的空白(仅支持匹配正则元字符\s)
*
* @param {string} str 传入的字符串参数, 为空时, 返回''
* @return {string}
*/
trim: function (str) {
return (str || '').replace(/^\s*(.*?)\s*$/, '$1');
},
/**
* 判断一个对象是否一个方法, 包括使用new Function() 创建的
*
* @param {Function} fn 需要判断的对象
* @return {boolean}
*/
isFunction: function (fn) {
return pto.toString.call(fn) === '[object Function]';
},
isArray: Array.isArray,
/**
* 判断一个对象是否 Object 源对象(未使用其他构造方法创建或其他基本对象)
*
* @param {Object} obj 需要判断的对象
* @return {boolean}
*/
isPlainObject: function (obj) {
if (typeof obj !== 'object' || obj.nodeType || obj === obj.window) {
return false;
}
if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) {
return false;
}
return true;
},
/**
* 将一个数据对象转化成一个序列换数组 。
*
* @param {Object} dataObj 传入的简单数据对象
* @return {Array} 序列化数组,形如:[{name:'a',value:1},{name:'b',value:2}]
*/
obj2array: function (dataObj) {
var res = [];
for (var key in dataObj) {
if (dataObj.hasOwnProperty(key)) {
if (wfQuery.isArray(dataObj[key])) {
for (var i = 0; i < dataObj[key].length; i++) {
res.push({
name: key,
value: dataObj[key][i]
});
}
}
else {
res.push({
name: key,
value: dataObj[key]
});
}
}
}
return res;
},
/**
* 将一个序列换数组转化成一个数据对象。
*
* @param {Array} serializeArr 传入的序列化数组
* @return {Object} 返回对象
*/
array2obj: function (serializeArr) {
var res = {};
var setResToArr = function (i) {
if (wfQuery.isArray(res[i.name])) {
res[i.name].push(i.value);
}
else if (typeof res[i.name] === 'string') {
res[i.name] = [res[i.name], i.value];
}
else {
res[i.name] = i.value;
}
};
serializeArr.forEach(setResToArr);
return res;
},
/**
* 将一个序列换数组或数据对象转化成 序列化字符串。
*
* @param {*} serializeArr 传入的序列化数组对象或者string
* @return {string} 序列化字符串,形如: a=1&b=2&c=3&c=4
*/
param: function (serializeArr) {
var arr;
// 如果是序列化数组,赋值备用
if (wfQuery.isArray(serializeArr)) {
arr = serializeArr;
}
// 如果是数据对象,转化成序列化数组备用
else if (typeof serializeArr === 'object') {
arr = wfQuery.obj2array(serializeArr);
}
// 如果是字符串,直接当作序列化完成的字符串返回
else {
return serializeArr;
}
// 序列化过程
return arr.map(function (item) {
if (typeof item.value === 'undefined') {
return '';
}
return encodeURIComponent(item.name) + '=' + encodeURIComponent(item.value);
}).join('&').replace(/%20/g, '+');
}
});