浮点数取整
注意:前三种方法只适用于32个位整数,对于负数的处理上和 Math.floor是不同的。
生成6位数字验证码
16进制颜色代码生成
驼峰命名转下划线
url查询参数转json格式
// 对应ES5实现
var query = function(search) {
if (search === void 0) { search = ''; }
return (function(querystring) {
if (querystring === void 0) { querystring = ''; }
return (function(q) {
return (querystring.split('&').forEach(function(item) {
return (function(kv) {
return kv[0] && (q[kv[0]] = kv[1]);
})(item.split('='));
}),q);
})({});
})(search.split('?')[1]);
};
query('?key1=value1&key2=value2'); // es6.html:14 {key1: "value1",key2: "value2"}
获取URL参数
n维数组展开成一维数组
注:更多方法请参考《nofollow" target="_blank" href="https://stackoverflow.com/questions/27266550/how-to-flatten-nested-array-in-javascript">How to flatten nested array in JavaScript?》
日期格式化
format1(new Date(),'yy-M-d h:m:s'); // 17-10-14 22:14:41
// 方法二
Date.prototype.format = function (fmt) {
var o = {
"M+": this.getMonth() + 1,//月份
"d+": this.getDate(),//日
"h+": this.getHours(),//小时
"m+": this.getMinutes(),//分
"s+": this.getSeconds(),//秒
"q+": Math.floor((this.getMonth() + 3) / 3),//季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)){
fmt = fmt.replace(RegExp.$1,(this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o){
if (new RegExp("(" + k + ")").test(fmt)){
fmt = fmt.replace(RegExp.$1,(RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
new Date().format('yy-M-d h:m:s'); // 17-10-14 22:18:17
特殊字符转义
动态插入js
格式化数量
身份证验证
a = parseInt(sNo.substr(0,1)) 7 + parseInt(sNo.substr(1,1)) 9 + parseInt(sNo.substr(2,1)) 10;
a = a + parseInt(sNo.substr(3,1)) 5 + parseInt(sNo.substr(4,1)) 8 + parseInt(sNo.substr(5,1)) 4;
a = a + parseInt(sNo.substr(6,1)) 2 + parseInt(sNo.substr(7,1)) 1 + parseInt(sNo.substr(8,1)) 6;
a = a + parseInt(sNo.substr(9,1)) 3 + parseInt(sNo.substr(10,1)) 7 + parseInt(sNo.substr(11,1)) 9;
a = a + parseInt(sNo.substr(12,1)) 10 + parseInt(sNo.substr(13,1)) 5 + parseInt(sNo.substr(14,1)) 8;
a = a + parseInt(sNo.substr(15,1)) 4 + parseInt(sNo.substr(16,1)) * 2;
b = a % 11;
if (b == 2) {
c = sNo.substr(17,1).toUpperCase();
} else {
c = parseInt(sNo.substr(17,1));
}
switch (b) {
case 0:
if (c != 1) {
return false;
}
break;
case 1:
if (c != 0) {
return false;
}
break;
case 2:
if (c != "X") {
return false;
}
break;
case 3:
if (c != 9) {
return false;
}
break;
case 4:
if (c != 8) {
return false;
}
break;
case 5:
if (c != 7) {
return false;
}
break;
case 6:
if (c != 6) {
return false;
}
break;
case 7:
if (c != 5) {
return false;
}
break;
case 8:
if (c != 4) {
return false;
}
break;
case 9:
if (c != 3) {
return false;
}
break;
case 10:
if (c != 2) {
return false;
};
}
return true;
}
测试质数
统计字符串中相同字符出现的次数
使用 void0来解决 undefined被污染问题
单行写一个评级组件
JavaScript 错误处理的方式的正确姿势
匿名函数自执行写法
两个整数交换数值
数字字符转数字
最短的代码实现数组去重
用最短的代码实现一个长度为m(6)且值都n(8)的数组
将argruments对象转换成数组
var argArray = Array.from(arguments)
// or
var argArray = [...arguments];
获取日期时间缀
使用 ~x.indexOf('y')来简化 x.indexOf('y')>-1
两者的差别之处在于解析和转换两者之间的理解。
解析允许字符串中含有非数字字符,解析按从左到右的顺序,如果遇到非数字字符就停止。而转换不允许出现非数字字符,否者会失败并返回NaN。
parseInt方法第二个参数用于指定转换的基数,ES5默认为10进制。
对于网上 parseInt(0.0000008)的结果为什么为8,原因在于0.0000008转换成字符为"8e-7",然后根据 parseInt的解析规则自然得到"8"这个结果。
+ 拼接操作,+x or String(x)?
+运算符可用于数字加法,同时也可以用于字符串拼接。如果+的其中一个操作符是字符串(或者通过 隐式强制转换可以得到字符串),则执行字符串拼接;否者执行数字加法。
需要注意的时对于数组而言,不能通过 valueOf()方法得到简单基本类型值,于是转而调用 toString()方法。
对于对象同样会先调用 valueOf()方法,然后通过 toString()方法返回对象的字符串表示。
对于 a+""隐式转换和 String(a)显示转换有一个细微的差别: a+''会对a调用 valueOf()方法,而 String()直接调用 toString()方法。大多数情况下我们不会考虑这个问题,除非真遇到。
判断对象的实例
数据安全类型检查
让数字的字面值看起来像对象
对象可计算属性名(仅在ES6中)
数字四舍五入
在浏览器中根据url下载文件
快速生成UUID
JavaScript浮点数精度问题
格式化表单数据
创建指定长度非空数组
在JavaScript中可以通过new Array(3)的形式创建一个长度为3的空数组。在老的Chrome中其值为[undefined x 3],在最新的Chrome中为[empty x 3],即空单元数组。在老Chrome中,相当于显示使用[undefined,undefined,undefined]的方式创建长度为3的数组。
多数情况我们期望创建的是包含undefined值的指定长度的空数组,可以通过下面这种方法来达到目的:
总之,尽量不要创建和使用空单元数组。
以上所述是小编给大家介绍的JavaScript 有用的代码片段和 trick。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。
原文链接:https://www.f2er.com/js/33652.html