慢慢将自己积累的常用业务代码整理起来,以后经验丰富再回头修改完善,而且平常也会用得到。
还有一些是常用的API整理。
1、金额转换
将类似 12345
元转换成 1.23万
元:
1 | // 参数 : num => 需要转换的金额 |
2、获取第N天的日期
输入需要从今天往前推 N
天,即可获取那一天的时间,格式如 2017-11-11
。
如果需要修改时间 连接符
直接在代码修改。
1 | // 参数 : num => 需要前几天 |
另外如果需要返回对象的话,只要将后面代码用 new Date()
转化或者写在函数里面也可以。
如:
1 | let time = new Date(getBeforeDate(7)); // 返回七天前的时间对象。 |
3、转换数字为整十整百
实现效果如:
传入 'down'
参数,返回格式如: 123.456 => 100
;
传入 'up'
参数,返回格式如: 123.456 => 200
;
这个是我在用 Echarts
绘制折线图,需要设置好坐标轴 Label
用到的。
1 | // 参数 : data => 需要转换的数值 ,type => 转换类型 |
4、本地时间转换
就是官方API而已:
1 | let a = new Date(); |
5、序列化对象
主要就是JSON类型和字符串的转换:
1 | // 参数 data => 需要转换的内容 |
6、数组排序
使用 sort()
方法。
1 | var a= [ 'banana' , ' chree' , 'apple']; |
7、简单求一个纯数字数组中最大最小值
1 | Math.max.apply(null,[3,2,5,7]); |
8、获取某一天0点0分0秒
1 | let d = new Date( 2017 , 12 , 01 ) |
9、获取并设置滚动条距顶部的距离
1 | export function getScroll(){ |
10、判断一个对象是否是空对象
1 | let c = {} |
11、简单数组去重
这是 ES6
的新特性。
仅去重:
1 | let arr = [1,2,2,3,4,1,2,5,6,5]; |
去重加排序
1 | let new_arr4 = [...new Set(arr1)].sort(function(a,b){return a-b}); // {Array} [1,2,3,4,5,6] |
12、获取某天0点0分0秒到第二天0点0分0秒
这是项目业务中用到的,用在查询数据库用户列表中所有今天注册用户的列表,也可以用在查询某一天,或某个时间段的内容。
1 | let today = '2017-12-07'; |
13、判断是否是邮箱地址
参数:{String} str
返回:{Boolean}
1 | function isEmail(str) { |
14、判断是否为身份证号
参数:{String|Number} str
返回:{Boolean}
1 | function isIdCard(str) { |
15、判断是否为手机号
参数:{String|Number} str
返回:{Boolean}
1 | function isPhoneNum(str) { |
16、判断是否为URL地址
参数:{String} str
返回:{Boolean}
1 | function isUrl(str) { |
17、现金转大写
参数:{Number} str
返回:{String}
1 | function digitUppercase(n) { |
18、回到页面顶端
方法一:用 <a href="#"></a>
方法二:
1 | function backtop(){ |
19、ES7/8新特性
Array.prototype.includes()方法
includes()
的作用,是查找一个值在不在数组里,若在,则返回 true
,反之返回 false
。 基本用法:
1 | ['a', 'b', 'c'].includes('a') // true |
Array.prototype.includes()
方法接收两个参数:要搜索的值和搜索的开始索引。
当第二个参数被传入时,该方法会从索引处开始往后搜索(默认索引值为0)。若搜索值在数组中存在则返回 true
,否则返回 false
。 且看下面示例:
1 | ['a', 'b', 'c', 'd'].includes('b') // true |
那么,我们会联想到ES6里数组的另一个方法indexOf,下面的示例代码是等效的:
1 | ['a', 'b', 'c'].includes('a') //true |
20、常用的直接取整方法
1、parseInt()
直接取整就是舍去小数部分。
1 | arseInt("2015nov"), //2015 |
2、Math.trunc()
Math.trunc() 方法会将数字的小数部分去掉,只保留整数部分。IE不支持。
1 | Math.trunc(13.37) // 13 |
3、~~number
双波浪线 ~~
操作符也被称为 “双按位非”
操作符。常可代替 Math.trunc()
的更快的方法。
1 | console.log(~~47.11) // -> 47 |
4、number|0
|
(按位或) 对每一对比特位执行或(OR)操作。
1 | console.log(20.15|0); // -> 20 |
5、number^0
^
(按位异或),对每一对比特位执行异或(XOR)操作。
1 | console.log(20.15^0); // -> 20 |
6、number<<0
<<
(左移) 操作符会将第一个操作数向左移动指定的位数。向左被移出的位被丢弃,右侧用 0 补充。
1 | console.log(20.15 < < 0); // -> 20 |
21、舍入舍去取整
a、四舍五入 Math.round(number)
Math.round() 是 Math 对象中的一个方法,将数值四舍五入为最接近的整数。
1 | console.log(Math.round(20.1)); // -> 20 |
b、向下取整 Math.floor(number)
Math.floor()这个方法取向下最接近的整数。
1 | console.log(Math.floor(20.1)); // -> 20 |
c、向上取整 Math.ceil(number)
Math.ceil()这个方法取向上最接近的整数。
1 | console.log(Math.ceil(20.1)); // -> 21 |
22、for..in 和 for..of
1-推荐在循环对象属性的时候,使用for…in,在遍历数组的时候的时候使用for…of。
2-for…in循环出的是key,for…of循环出的是value
3-注意,for…of是ES6新引入的特性。修复了ES5引入的for…in的不足
4-for…of不能循环普通的对象,需要通过和Object.keys()搭配使用
23、jquery等库引入失败
原因有可能是jquery内部对全局的错误判断导致,就像我在用 Electron
开发桌面应用时引入 jquery
就遇到这样的问题,解决方法是这样写:
1 | <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> |
24、多个ajax请求会出现异步情况,可以使用async/await解决
1 | async function fun1 (){ |
25、WebSocket测试代码
这是我拿来测试WebSocket接口的代码。
1 | <html> |
26、创建对象的三种方法
第一种方式,字面量
1 | var o1 = {name: "o1"} |
第二种方式,通过构造函数
1 | var o2 = new Object({name: "o2"}) |
第三种方式,Object.create
1 | var p = {name: "p"} |
新创建的对o4的原型就是p,同时o4也拥有了属性name
27、JS实现继承的几种方式
借用构造函数实现继承
1 | function Parent1(){ |
缺点:Child1无法继承Parent1的原型对象,并没有真正的实现继承(部分继承)。
借用原型链实现继承
1 | function Parent2(){ |
缺点:原型对象的属性是共享的。
组合式继承
1 | function Parent3(){ |
28、随机码生成(toString详解)
1 | let randomWord = function(count){ |
29、Number对象的5个方法介绍
1 | num.toString(n) // 把数字转换为字符串,使用指定的基数。 n可选,2~36 若写2 则转换成二进制,默认10 |
30、for循环和语句命名
为for循环
命名,然后在for循环
中的continue
或break
能控制指定名称的for循环
,操作如下:
1 | loop1: // 标记 "loop1" |
另外,给语句块命名后,可以在break
之后使用新命名。
1 | foo: { |