这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战。
前言
ECMAScript 6.0 简称ES6 , 是 JavaScript 语言的新一代的标准,于在 2015 年 6 月发布,正式名称就是《ECMAScript 2015 标准》。一般情况,泛指, 5.1版以后的标准,涵盖了 ES2015、ES2016、ES2017、ES2018、ES2019、ES2020、ES2021 等等
我们一起来学习
- String.prototype.trim
- String.prototype.trimStart
- String.prototype.trimEnd
均是对字符串去掉空白字符 ,从名字也能看出来, trim是去掉前后, trimStart去掉开始部分, trimEnd去掉结束部分。
那么第一个问题来了,空白字符,何为空白字符。
何为空白字符
大家都知道正则\s代表空格字符,其并不是单指某个字符,其实是一个集合,包含:
\f换页\n换行符\r回车符\t制表符\v垂直制表符
除此之外还有两个特殊的空白字符:
-
\uFEFF
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。
至于其是怎么工作的,我们单独的文章再来解释。 -
\xA0\xa0是不间断空白符。 我们通常所用的空格是\x20,是在标准ASCII可见字符0x20~0x7e范围内。 而\xa0属于latin1(ISO/IEC_8859-1)中的扩展字符集字符,代表空白符nbsp(non-breaking space)。
除此之外,其实还有:
U+2060来表达零宽度无断空白。
'\u2060' // ''
而 core-js whitespaces里面是这么定义空白字符的。
// a string of all valid unicode whitespaces
module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
我们执行一下:
'\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'
// '\t\n\v\f\r
'
很多都是看不见的,至于其他少见的空白字符,我们之后再说。
编码范围:说明 0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)
String.prototype.trimStart
var text = " \v\f\t\xA0\uFEFF\r\n哈哈 ";
text.trimStart() // '哈哈 '
Polfill也很简单:
var r=/^\s+/;
String.prototype.trimStart = function (){
return this.replace(r,'')
}
String.prototype.trimEnd
var text = "哈哈 \v\f\t\xA0\uFEFF\r\n ";
text.trimStart() // '哈哈'
Polfill也很简单:
var r=/\s+$/;
String.prototype.trimStart = function (){
return this.replace(r,'')
}
String.prototype.trim
var text = " \v\f\t\xA0\uFEFF\r\n 哈哈 \v\f\t\xA0\uFEFF\r\n ";
text.trim() // '哈哈'
Polfill也很简单:
这个版本源于MDN,\uFEFF和\xA0被单独拿出来了,之前为什么没呢?
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
小结
今天你收获了吗?