[关闭]
@15013890200 2018-08-13T18:39:09.000000Z 字数 3994 阅读 512

javascript 常用方法(一)

原生js 闭包


tips:

在项目中,我们经常遇到一些方法,原生js并没有提供现成的相关的方法,因此我们只能自己定义自己要用到的方法,并将其挂在到全局作用域的变量上,这样在函数解释执行过后,在项目中的任何位置都可以调用封装好的方法。本次主要封装了:获取url链接参数、获取格式化时间、localstorage的相关操作

1 获取url参数方法

tips:网上有用正则表达式写的函数,我是用解析url链接参数方式获取个参数

1.1 函数代码

  1. function getUrlParam(){
  2. /**
  3. git Test
  4. hhh
  5. 哦呵呵呵
  6. branch master-dev tijiao-issue101
  7. 1、判断url参数个数,为空则直接返回空;
  8. 2、判断传入的参数是否为空,
  9. 为空:判断url参数个数,个数为1,则返回参数值;个数不为1,则返回空;
  10. 不为空:判断url参数个数,
  11. 个数为1,且对应参数无参数名只有参数值,则直接返回参数值;如果对应参数包含参数名则比对参数名,一致则返回参数值,否则返回空
  12. 个数不为1,则遍历参数数组,寻找与参数名对应的参数值,找到则返回相应的参数值,否则返回空
  13. */
  14. let str = '';
  15. let url = location.href;
  16. let param_str = url.split('?')[1];
  17. if(!param_str)return;
  18. let key_value = param_str.split('&');
  19. let arg = arguments;
  20. if(!arg || arg.length === 0){
  21. if(key_value.length === 1){
  22. if(key_value[0].indexOf('=') === -1){
  23. return key_value[0];
  24. }
  25. else{
  26. return key_value[0].split('=')[1];
  27. }
  28. }
  29. return;
  30. }
  31. else{
  32. str =arguments[0].toString();
  33. }
  34. if(!key_value || key_value.length <= 0)return;
  35. else{
  36. if(key_value.length == 1){
  37. if(key_value[0].indexOf('=') === -1){
  38. return key_value[0];
  39. }
  40. else if(key_value[0].split('=').length == 2){
  41. if(key_value[0].split('=')[0] == str){
  42. return key_value[0].split('=')[1];
  43. }
  44. else{
  45. return;
  46. }
  47. }
  48. }
  49. else{
  50. for(let i = 0; i < key_value.length; i++){
  51. let param = key_value[i].split('=');
  52. if(param[0] == str){
  53. return param[1];
  54. }
  55. }
  56. return;
  57. }
  58. }
  59. }

1.2 函数调用

  1. getUrlParam() //当url链接参数只有一个的时候,可以不指定参数名,直接返回参数值
  2. getUrlParamstr //返回指定参数名对应的参数值,没有则返回空值

2 获取格式化时间

2.1 函数代码

  1. function getFormatDate(){
  2. /*
  3. 1、参数1代表传进来的日期格式,可以是日期对象,也可以是日期的value数值
  4. 2、参数2代表最终返回结果,year、month、day、hour、minute、second 分表表示精确到对应位,week表示输出星期几
  5. 3、参数1不传表示默认当前日期;参数2不传默认输出精确到秒
  6. */
  7. let arg = arguments[0];
  8. let str = arguments[1];
  9. let date = null;
  10. let weeks = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
  11. if(!arg){
  12. date = new Date();
  13. }
  14. else{
  15. if(typeof arg === 'object'){
  16. date = arg;
  17. }
  18. else{
  19. date = new Date(arg);
  20. }
  21. }
  22. let year = date.getFullYear();
  23. let month = date.getMonth() + 1;
  24. let day = date.getDate();
  25. let hour = date.getHours();
  26. let minute = date.getMinutes();
  27. let second = date.getSeconds();
  28. let week = date.getDay();
  29. month = month > 9 ? month : ('0'+month);
  30. day = day > 9 ? day : ('0'+day);
  31. hour = hour > 9 ? hour : ('0'+hour);
  32. minute = minute > 9 ? minute : ('0'+minute);
  33. second = second > 9 ? second : ('0'+second);
  34. switch(str){
  35. case 'year': return year;
  36. case 'month': return year+'-'+month;
  37. case 'day': return year+'-'+month+'-'+day;
  38. case 'hour': return year+'-'+month+'-'+day+' '+hour;
  39. case 'minute': return year+'-'+month+'-'+day+' '+hour+':'+minute;
  40. case 'second': return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
  41. case 'week': return weeks[week];
  42. default: return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
  43. }
  44. }

2.2 函数调用

  1. getFormatDate() //获取当前时间,精确到秒
  2. getFormatDate(arg) //arg可以为时间戳也可以为日期对象,返回指定日期的时间,精确到秒
  3. getFormatDate(arg1,arg2) //arg1时间参数,arg2返回的日期格式,具体看代码首部注释

3 localStorage方法再封装

tips:

H5自带的localstorage方法,相较于cookie,极大的简化了本地存储参数。但是,其本身对localstorage封装的方法过于简单,只提供了基本功能,因此在使用过程中还是有些许不便。

3.1 setLocal 方法

tips:设置参数的同时,设置一个参数过期参数

3.1.1 函数代码

  1. function setLocal(key,value,expire){
  2. let key_timestamp = key + 'TimeStamp';
  3. let now_timestamp = (new Date()).valueOf();
  4. let time = expire ? (now_timestamp + expire*24*60*60*1000) : (now_timestamp + 24*60*60*1000);
  5. window.localStorage[key] = value;
  6. window.localStorage[key_timestamp] = time;
  7. }

3.1.2 函数调用

  1. setLocal(key,value,expire) //key参数名(必传),value参数值(必传),expire参数过期时间,不传则表示1天后过期

3.2 removeLocal 方法

tips:删除参数的同时,删除对应的过期参数

3.2.1 函数代码

  1. function removeLocal(key){
  2. window.localStorage.removeItem(key);
  3. window.localStorage.removeItem(key+'TimeStamp');
  4. }

3.2.2 方法调用

  1. removeLocal(key) //删除对应的参数及过期参数

3.3 getLocal 方法

tips:获取对应的参数之前,比对对应的过期参数的时间戳与当前时间戳,如果过期则删除对应的参数以及过期参数,否则返回参数值

3.3.1 函数代码

  1. function getLocal(key){
  2. let now_timestamp = (new Date()).valueOf();
  3. let key_timestamp = window.localStorage[key+'TimeStamp'];
  4. if(now_timestamp > key_timestamp){
  5. removeLocal(key);
  6. return undefined;
  7. }
  8. else{
  9. return window.localStorage[key];
  10. }
  11. }

3.3.2 函数调用

  1. getLocal(key) //获取指定的参数值

4 将函数定义为全局

tips:将封装好的参数添加到全局变量里面,再置于闭包里面

  1. (function(){
  2. function getUrlParam(){
  3. //...
  4. }
  5. function getFormatDate(){
  6. //...
  7. }
  8. function setLocal(key,value,expire){
  9. //...
  10. }
  11. function removeLocal(key){
  12. //...
  13. }
  14. function getLocal(key){
  15. //...
  16. }
  17. window.util = {
  18. 'getUrlParam': getUrlParam,
  19. 'getFormatDate': getFormatDate,
  20. 'setLocal': setLocal,
  21. 'getLocal': getLocal,
  22. 'removeLocal': removeLocal
  23. };
  24. console.log(window.util); //输出对应变量
  25. })();

4.1 调用

将以上代码引入主页面,之后就可以通过window.util[str]window.util.方式调用指定方法
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注