资讯专栏INFORMATION COLUMN

常用的JS方法

高胜山 / 825人阅读

一,判断当前元素是否是数组

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]")
}

4,isArray 原生方法判断

Array.isArray()
二,判断是否是对象
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);
}

5,判断是否为移动端

function isMobile() {
    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi/i.test(navigator.userAgent) ||
        screen.width < 500;
}
四,按需加载CSS与JS
/**
 * 按需加载js
 * @param {*} path
 */
function delayLoadJS(path) {
    if (!path) {
        return Promise.reject();
    }
    return new Promise((resolve, reject) => {
        let dom = null;
        const scripts = document.querySelectorAll("script");
        for (let item of 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.onload = null;
            };
            script.onerror = () => reject();
            document.body.appendChild(script);
        }
    });
}
/**
 * 按需加载css
 * @param {*} path
 */
function delayLoadCSS(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);
        }
    });
}
/**
 * 解决同时异步加载同一个文件的问题
 * @param {*} dom
 * @param {*} resolve
 */
function onload(dom, resolve) {
    const oldOnload = dom.onload;
    if (oldOnload) {
        dom.onload = () => {
            oldOnload();
            resolve();
        };
    } else {
        resolve();
    }
}
五,常用正则表达式

1,邮箱

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

2,QQ

function isQQ(qq) {
    var r = /^[1-9]d{4,10}$/;
    return r.test(qq);
}

3,网址

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

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);
}
六,对象的深拷贝

1,对象

// 简单粗暴,一步到位
JSON.parse(JSON.stringify(obj));

2,数组

可以用Array.slice(),Array.concat(),ES6扩展运算符...等方法来实现
七,结语

以上大概是目前来说项目中运用较多的一些公用方法,可能实现方法不是最好的,这里仅供参考。还有许多通用的方法,这里只想起这么多了,以后再慢慢补充吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105955.html

相关文章

  • Webpack 常用命令总结以及常用打包压缩方法

    摘要:全局安装初始化默认的文件下载插件到并在文件中加上的配置内容对项目进行打包自动监控文件的改变打包时显示隐藏的模块打包时显示显示详细错误信息安装并将该配置到文件中入口出口加载器插件安装完乘后执行报错,原因npminstall webpack -g // 全局安装webpack npminit //初始化默认的package.json文件 npminstall webpack -...

    番茄西红柿 评论0 收藏0
  • 【underscore.js 源码解读】常用类型判断以及一些有用工具方法

    摘要:最近开始看源码,并将源码解读放在了我的计划中。今天就跟大家聊一聊中一些常用类型检查方法,以及一些工具类的判断方法。用是否含有属性来判断工具类判断方法接下来看下一些常用的工具类判断方法。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码,就好像和一个个大师对话...

    tanglijun 评论0 收藏0
  • 前端基础入门五(掌握jQuery常用api,实现动态效果)

    摘要:基本概念学习目标学会如何使用,掌握的常用,能够使用实现常见的效果。想要实现简单的动画效果,也很麻烦代码冗余。实现动画非常简单,而且功能更加的强大。注意选择器返回的是对象。 jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。 为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javasc...

    nevermind 评论0 收藏0
  • 前端基础入门五(掌握jQuery常用api,实现动态效果)

    摘要:基本概念学习目标学会如何使用,掌握的常用,能够使用实现常见的效果。想要实现简单的动画效果,也很麻烦代码冗余。实现动画非常简单,而且功能更加的强大。注意选择器返回的是对象。 jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。 为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javasc...

    codecook 评论0 收藏0
  • 前端基础入门五(掌握jQuery常用api,实现动态效果)

    摘要:基本概念学习目标学会如何使用,掌握的常用,能够使用实现常见的效果。想要实现简单的动画效果,也很麻烦代码冗余。实现动画非常简单,而且功能更加的强大。注意选择器返回的是对象。 jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。 为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javasc...

    WalkerXu 评论0 收藏0
  • 前端基础入门五(掌握jQuery常用api,实现动态效果)

    摘要:基本概念学习目标学会如何使用,掌握的常用,能够使用实现常见的效果。想要实现简单的动画效果,也很麻烦代码冗余。实现动画非常简单,而且功能更加的强大。注意选择器返回的是对象。 jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。 为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javasc...

    widuu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<