常用Javascript方法

一,检测是否是Array

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 value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Array]'  ;
}

4,通过原生方法

Array.isArray(value);

二,检测是否是Object

function isObject(value){
   return value != null && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]';
}

三,检测环境

1,检测是否是Android

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);  
}

5,检测是否是Mobile

Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi
function isMobile(){
   return /Android|webOS|iphone|ipad|ipod|BlackBerry|IEMobile|Opera Mini|Mobile/.test(navigator.userAgent) && screen.width<500;  
}

四,按需加载javascript与css

1,加载javascript

/**
 * @param path 
 */
function loadJS(path){
    if(!path){
        return Promise.reject();  
    }
    return new Promise((resolve,reject)=>{
        let dom = null;
        const scripts = document.querySelectorAll('script');
        for(let item in scripts){
            if(new RegExp(path).test(item.src)){
                  dom = item;
                  onload(dom,()=>resolve());
                  return;
            }
        }
        if(!dom){
            const script = document.createElement('script');
            script.src = path;
            script.onload = (){
                resolve();
                script.onolad = null;
            }
            script.onerror = ()=>reject();
            document.body.appendChild(script);
        }
    });
}

2,加载css

/**
 * @param path
 */
function loadCSS(path) {
    if (!path) {
        return Promise.reject();
    }
    return new Promise((resolve, reject) => {
        let dom = null;
        let links = document.querySelectorAll('link');
        for (let item of links) {
            if (new RegExp(path).test(item.href)) {
                dom = item;
                onload(dom, resolve);
                return;
            }
        }
        if (!dom) {
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = path;
            link.onload = () => {
                resolve();
                link.onload = null;
            };
            link.onerror = () => reject();
            document.head.appendChild(link);
        }
    });
}

3,解决异步加载同一个文件的问题

/**
 * @param dom
 * @param resolve
 */
function onload(dom, resolve) {
    const oldOnload = dom.onload;
    if (oldOnload) {
        dom.onload = () => {
            oldOnload();
            resolve();
        };
    } else {
        resolve();
    }
}

五,常用正则表达式

1,邮箱

function isEmail(email){
   let p = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   return p.test(email);
}

2,QQ

function isQQ(qq){
   let p = /^[0-9]\d{4,10}/;
   return p.test(qq);
}

3,网址

function isUrl(url) {
   let p = /^(((ht)tps?):\/\/)?[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/;
   return p.test(url);
}

4,身份证

function isCard(str) {
   return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
}

5,中文

function isChinese(str) {
   return /^[\u4e00-\u9fa5]+$/.test(str);
}

6,英文

function isEnglish(str) {
   return /^[a-zA-Z]*$/.test(str);
}

六,对象深拷贝

JSON.parse(JSON.stringify(obj));

 

posted @ 2019-07-27 10:43  ツ稻草人  阅读(218)  评论(0)    收藏  举报