在易企秀工作了快两年了,做过不同的项目,接触过不同的框架,发现有许多基础的方法使用率很高,今天简单的总结一部分(不全,以后慢慢补吧)。
一,判断当前元素是否是数组
1,通过 constructor 判断
function isArray(value) {
return value && typeof value == 'object' && value.constructor === Array
}
2,通过instanceof 判断判断
function isArray(value) {
return value && typeof value == 'object' && value instanceof Array
}
3,通过 toString 判断
function isArray(value) {
return Array.isArray(value) || (typeof value == 'object' && Object.prototype.toString.call(value) === '[object Array]')
}
二,判断是否是对象
function isObject(value) {
return value != null && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]'
}
三,判断浏览器环境
1,判断是否安卓
function isAndroid() {
return /Android/i.test(navigator.userAgent) || /Linux/i.test(navigator.appVersion);
}
2,判断是否ios
function isIOS() {
return (/ipad|iphone/i.test(navigator.userAgent));
}
3,判断是否是Safari
function isSafari() {
return (/msie|applewebkit.+safari/i.test(navigator.userAgent));
}
4,判断是否在微信
function isWeixin() {
return /MicroMessenger/i.test(navigator.userAgent);
}
三,使用promise封装ajax(对jq的ajax的封装)
1,普通的封装
function $ajax(config) {
return new Promise(function (resolve, reject) {
$.ajax($.extend({}, config, {
success: function (data) {
if (data && data.success === false) {
reject(data);
} else {
resolve(data);
}
},
error: function (...args) {
console.error(config, ...args);
reject(...args);
}
}));
});
}
2,添加跨域的ajax
function ajax(config) {
return new Promise(function (resolve, reject) {
$.ajax($.extend(
{
xhrFields: {
withCredentials: true
},
crossDomain: true
},
config,
{
success: function (data) {
if (data && data.success === false) {
reject(data);
} else {
resolve(data);
}
},
error: function (...args) {
console.error(config, ...args);
reject(...args);
}
}));
});
}
对于ajax请求,我们可能直接将后续的一些业务逻辑直接写在了ajax的会调里,如果业务逻辑比较复杂,就会造成代码嵌套层级较深,不好阅读与维护。这里我们用promise对ajax进行简单的封装,这样我们将后续的业务写在then()里,可以避免‘回调地狱’的产生。
四,对象的深拷贝
1,对于object
// 简单粗暴,一步到位
JSON.parse(JSON.stringify(obj));
2,对于数组,我们可以用Array.slice(),Array.concat(),ES6扩展运算符...来实现。
以上大概是目前来说运用的最多的一些公用方法,可能实现方法不是最好的,这里仅供参考。还有许多通用的方法,这里只想起这么多了,以后再慢慢补充吧。