JS字符串补全方法padStart()和padEnd()


Posted in Javascript onMay 27, 2020

这个方法无意中看到的,感觉还是蛮实用的,特此分享一波。我想大家都会有遇到将时间戳转换成时间格式的时候,时间或日期不足2位的前面补0。有了今天说的这个东西,就又可以少写几行代码了,大家在项目中遇到类似场景可以去使用感受下。

ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。

padStart() padEnd() 方法用另一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。
padStart() 从当前字符串的开始(左侧) 位置填充。
padEnd() 从当前字符串的末尾(右侧)开始填充。

语法:

str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])

padStart() 和 padEnd() 一共接受两个参数,第一个参数 targetLength 是当前字符串需要填充到的目标长度,第二个参数 padString 是用来填充的字符串,缺省值为" "。

返回值:

在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串。

如果 targetLength 小于当前字符串的长度,则字符串补全不生效,返回当前字符串本身。

'abc'.padStart(1, 'd');     // "abc"
'abc'.padEnd(1, 'd');     // "abc"

如果 targetLength 小于用来填充的字符串长度与原字符串的长度之和,则截掉超出位数的补全字符串。

'abc'.padStart(6,"123456");    // "123abc"
'abc'.padEnd(6, "123456");    // "abc123"

如果省略第二个参数 padString,即使用空格补全长度。

'abc'.padStart(10);     // "    abc"
'abc'.padEnd(10);     // "abc    "

如果 padString 长度过长,则会删除后面多出的字符串。

'abc'.padStart(5, "foo");    // "foabc"
'abc'.padEnd(5, "foo");     // "abcfo"

应用:

  • 补全指定位数,如格式化时间或日期时,个位数补0
  • 提示字符串格式 字符串拼接

示例:

当我们使用时间戳并转换成 yyyy-mm-dd hh:mm:ss 的格式。

function dataFormat(data) {
  const dt = new Date(data * 1000) //注:如果是13位时间戳不用*1000 
  
  const y = dt.getFullYear()
  const m = (dt.getMonth() + 1 + '').padStart(2, '0')
  const d = (dt.getDay() + '').padStart(2, '0')
​
  const hh = (dt.getHours() + '').padStart(2, '0')
  const mm = (dt.getMinutes() + '').padStart(2, '0')
  const ss = (dt.getSeconds() + '').padStart(2, '0')
​
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

因着此方法是ES6新增方法,部分浏览器不支持,会有兼容性问题。 查看 Polyfill 创建的String.prototype.padStart() / String.prototype.padEnd() 方法。

// https://github.com/uxitten/polyfill/blob/master/string.polyfill.js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd
if (!String.prototype.padEnd) {
  String.prototype.padEnd = function padEnd(targetLength,padString) {
    targetLength = targetLength>>0; //floor if number or convert non-number to 0;
    padString = String((typeof padString !== 'undefined' ? padString: ''));
    if (this.length > targetLength) {
      return String(this);
    }
    else {
      targetLength = targetLength-this.length;
      if (targetLength > padString.length) {
        padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
      }
      return String(this) + padString.slice(0,targetLength);
    }
  };
}

到此这篇关于JS字符串补全方法padStart()和padEnd()的文章就介绍到这了,更多相关JS padStart() padEnd()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
为你的网站增加亮点的9款jQuery插件推荐
May 03 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
JS实现的贪吃蛇游戏完整实例
Jan 18 Javascript
jQuery内容选择器与表单选择器实例分析
Jun 28 jQuery
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 Javascript
解决vue+router路由跳转不起作用的一项原因
Jul 19 Javascript
vant picker+popup 自定义三级联动案例
Nov 04 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 #Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 #Javascript
使用JavaScript获取Django模板指定键值数据
May 27 #Javascript
基于Vue CSR的微前端实现方案实践
May 27 #Javascript
Node.js API详解之 vm模块用法实例分析
May 27 #Javascript
jQuery实现鼠标滑动切换图片
May 27 #jQuery
js验证账户名是否重复
May 26 #Javascript
You might like
PHP中预定义的6种接口介绍
2015/05/12 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
vue+element UI实现树形表格
2020/12/29 Vue.js
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python实现比较文件内容异同
2018/06/22 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
高中生毕业学习总结的自我评价
2013/11/14 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
体育教师求职信
2014/06/30 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
药品开票员岗位职责
2015/04/15 职场文书
观后感格式
2015/06/19 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
nginx请求限制配置方法
2021/07/09 Servers