使用到的javascript方法

使用到的javascript方法
 最后更新于 2024年10月01日 23:00:08

1、m 到 n 内的随机数

/**
 * m - n 内的随机数
 * @param {Number} m 最小值/最大值
 * @param {Number} n 最大值/最小值
 */
function random (m, n) {
  return Math.floor(Math.random()*(m-n+1)+n)
}

random(100, 0)

2、访问暂无存在的嵌套对象

var user = {
  id: 1,
  email: '123@qq.com',
  personalInfo: {
    name: 'Jack',
    address: {
      line1: '123',
      line2: '345',
      city: 'hefei',
      state: 'wx'
    }
  }
};

var name = ((user || {}).location || {}).lat;

console.log(name);
console.log(user.location.lat);

# undefined(返回的是 string 类型)
# Uncaught TypeError: Cannot read property 'lat' of undefined

3、格式化数字、金额

/**
 * 格式化数字、金额
 * @param {Number} number 需要格式化的数字
 * @param {Number} decimals 保留几位小数
 * @param {String} dec_point 小数点符号
 * @param {String} thousands_sep 千分位符号
 * @return {String} 格式化后的金额
 */
function formatMoney (number, decimals, dec_point, thousands_sep) {
  number = (number + '').replace(/[^0-9+-Ee.]/g, '');

  var n = !isFinite(+number) ? 0 : + number;
  var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
  var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
  var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
  var s = '';
  var toFixedFix = function (n, prec) {
    var k = Math.pow(10, prec);
    return '' + Math.ceil(n * k) / k;
  };

  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');

  var re = /(-?\d+)(\d{3})/;

  while (re.test(s[0])) {
    s[0] = s[0].replace(re, "$1" + sep + "$2");
  }

  if ((s[1] || '').length < prec) {
    s[1] = s[1] || '';
    s[1] += new Array(prec - s[1].length + 1).join('0');
  }

  return s.join(dec);
}

4、base64解码

function base64_decode (data) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,ac = 0,dec = "";
    var tmp_arr = [];

    if (!data) { return data; }

    data += '';

    do {
        h1 = b64.indexOf(data.charAt(i++));
        h2 = b64.indexOf(data.charAt(i++));
        h3 = b64.indexOf(data.charAt(i++));
        h4 = b64.indexOf(data.charAt(i++));
        bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
        o1 = bits >> 16 & 0xff;
        o2 = bits >> 8 & 0xff;
        o3 = bits & 0xff;

        if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
        } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
        } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
        }
    } while (i < data.length);

    dec = tmp_arr.join('');
    dec = utf8_decode(dec);

    return dec;
}

5、utf8解码

function utf8_decode (str_data) {
    var tmp_arr = [];
    var i = 0;
    var ac = 0;
    var c1 = 0;
    var c2 = 0;
    var c3 = 0;
    var str_data += '';

    while (i < str_data.length) {
        c1 = str_data.charCodeAt(i);

        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if (c1 > 191 && c1 < 224) {
            c2 = str_data.charCodeAt(i + 1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i + 1);
            c3 = str_data.charCodeAt(i + 2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }

    return tmp_arr.join('');
}

6、半角转换为全角函数

function ToDBC (str) {
    var result = '';

    for (var i = 0; i < str.length; i++) {
        code = str.charCodeAt(i);

        if (code >= 33 && code <= 126) {
            result += String.fromCharCode(str.charCodeAt(i) + 65248);
        } else if (code == 32) {
            result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);
        } else {
            result += str.charAt(i);
        }
    }

    return result;
}

7、全角转换为半角函数

function ToCDB (str) {
    var result = '';

    for (var i = 0; i < str.length; i++) {
        code = str.charCodeAt(i);

        if (code >= 65281 && code <= 65374) {
            result += String.fromCharCode(str.charCodeAt(i) - 65248);
        } else if (code == 12288) {
            result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
        } else {
            result += str.charAt(i);
        }
    }

    return result;
}

8、用正则表达式清除HTML代码中的脚本

function clear_script (html) {
    return html.replace(/<script.*?>[\s\S]*?<\/script>|\s+on[a-zA-Z]{3,16}\s?=\s?"[\s\S]*?"|\s+on[a-zA-Z]{3,16}\s?=\s?'[\s\S]*?'|\s+on[a-zA-Z]{3,16}\s?=[^ >]+/ig,"");
}

9、获取当前元素样式

function getStyle (oElm, strCssRule) {
    var strValue = "";

    if (document.defaultView && document.defaultView.getComputedStyle){
        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
    }
    else if (oElm.currentStyle) {
        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
            return p1.toUpperCase();
        });
        strValue = oElm.currentStyle[strCssRule];
    }
    return strValue;
}

10、格式化CSS样式代码

function formatCss (s) {
    s = s.replace(/\s*([\{\}\:\;\,])\s*/g, "$1");
    s = s.replace(/;\s*;/g, ";"); // 清除连续分号
    s = s.replace(/\,[\s\.\#\d]*{/g, "{");
    s = s.replace(/([^\s])\{([^\s])/g, "$1 {\n\t$2");
    s = s.replace(/([^\s])\}([^\n]*)/g, "$1\n}\n$2");
    s = s.replace(/([^\s]);([^\s\}])/g, "$1;\n\t$2");
    return s;
}

11、压缩CSS样式代码

function compressCss (s) {
    s = s.replace(/\/\*(.|\n)*?\*\//g, ""); // 删除注释
    s = s.replace(/\s*([\{\}\:\;\,])\s*/g, "$1");
    s = s.replace(/\,[\s\.\#\d]*\{/g, "{"); // 容错处理
    s = s.replace(/;\s*;/g, ";"); // 清除连续分号
    s = s.match(/^\s*(\S+(\s+\S+)*)\s*$/); // 去掉首尾空白
    return (s == null) ? "" : s[1];
}

12、常用的正则表达式

//正整数
/^[0-9]*[1-9][0-9]*$/;
//负整数
/^-[0-9]*[1-9][0-9]*$/;
//正浮点数
/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
//负浮点数
/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
//浮点数
/^(-?\d+)(\.\d+)?$/;
//email地址
/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
//url地址
/^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
//年/月/日(年-月-日、年.月.日)
/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/;
//匹配中文字符
/[\u4e00-\u9fa5]/;
//匹配帐号是否合法(字母开头,允许5-10字节,允许字母数字下划线)
/^[a-zA-Z][a-zA-Z0-9_]{4,9}$/;
//匹配空白行的正则表达式
/\n\s*\r/;
//匹配中国邮政编码
/[1-9]\d{5}(?!\d)/;
//匹配身份证
/\d{15}|\d{18}/;
//匹配国内电话号码
/(\d{3}-|\d{4}-)?(\d{8}|\d{7})?/;
//匹配IP地址
/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/;
//匹配首尾空白字符的正则表达式
/^\s*|\s*$/;
//匹配HTML标记的正则表达式
< (\S*?)[^>]*>.*?|< .*? />;
//sql 语句
^(select|drop|delete|create|update|insert).*$
//提取信息中的网络链接
(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
//提取信息中的邮件地址
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
//提取信息中的图片链接
(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
//提取信息中的 IP 地址
(\d+)\.(\d+)\.(\d+)\.(\d+)
//取信息中的中国手机号码
(86)*0*13\d{9}
//提取信息中的中国邮政编码
[1-9]{1}(\d+){5}
//提取信息中的浮点数(即小数)
(-?\d*)\.?\d+
//提取信息中的任何数字
(-?\d*)(\.\d+)?
//电话区号
^0\d{2,3}$
//腾讯 QQ 号
^[1-9]*[1-9][0-9]*$
//帐号(字母开头,允许 5-16 字节,允许字母数字下划线)
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
//中文、英文、数字及下划线
^[\u4e00-\u9fa5_a-zA-Z0-9]+$

13、时间格式化

// 判断当前日期为当月第几周
var getMonthWeek = function (a, b, c) {
  // a = d = 当前日期
  // b = 6 - w = 当前周的还有几天过完(不算今天)
  // a + b 的和在除以7 就是当天是当前月份的第几周
  var date = new Date(a, parseInt(b) - 1, c),
      w = date.getDay(),
      d = date.getDate();
  return Math.ceil((d + 6 - w) / 7);
};
function getWeek(str) {
  // 将字符串转为标准时间格式
    str = Date.parse(str);
    str = new Date(str);
  // 先计算出该日期为第几周
    let week = Math.ceil(str.getDate()/7);
    let month = str.getMonth() + 1;
  // 判断这个月前7天是周几,如果不是周一,则计入上个月
    if  (str.getDate() < 7) {
        if (str.getDay() !== 1) {
            week = 5;
            month = str.getMonth();
        }
    }
    console.log(`${month}-${week}`);
}
var getYearWeek = function (a, b, c) {
    // date1是当前日期
    // date2是当年第一天
    // d是当前日期是今年第多少天
    // 用d + 当前年的第一天的周差距的和在除以7就是本年第几周
    var date1 = new Date(a, parseInt(b) - 1, c);
    var date2 = new Date(a, 0, 1);
    var d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);

    return Math.ceil((d + ((date2.getDay() + 1) - 1)) / 7);
};

14、base64转Blob

/**
 * base64图片转Blob数据流
 * @param {String} dataurl base64的图片
 * @return {Blob} 返回图片的Blob数据流
 */
dataURLtoBlob(dataurl) {
  return new Promise((resolve, reject) => {
    try {
      var arr = dataurl.split(',');
      var mime = arr[0].match(/:(.*?);/)[1];
      var bstr = atob(arr[1]);
      var n = bstr.length;
      var u8arr = new Uint8Array(n);

      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }

      const _blob = new Blob([u8arr], {type: mime});

      resolve(_blob);
    } catch (err) {
      reject(err);
    }
  });
}
```

15、base64转File

/**
 * base64 转 File
 * @param {String} base64 待转换的base64格式的图片
 * @param {String} fileName 转换后的文件名
 * @return {File}
 */
function (base64, fileName) {
    let arr = base64.split(',');
    let mime = arr[0].match(/:(.*?);/)[1];
    let bstr = atob(arr[1]);
    let n = bstr.length;
    let u8arr = new Uint8Array(n);

    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }

    return new File([u8arr], fileName, {
      type: mime
    });
}