es6字符串扩展

  //1.字符的Unicode表示法

console.log("\u0061");//这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。

console.log("\uD842\uDFB7");

//超过的不可打印显示空格,则打印了空格+7
console.log("\u20bb7");
//加大括号识别
console.log("\u{20bb7}");

// 大括号表示法与四字节的 UTF-16 编码是等价的

'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

// 2.codePointAt()字符以UTF-16的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript会认为它们是两个字符。

var s="𠮷";

console.log(s.length);

// s.chatAt(0)
// s.chatAt(1)
//无法读取该字符串
s.charCodeAt(0)
s.charCodeAt(1)
//只能返回前两个字节和后两个字节的值

//codePointAt则可以返回正常的码点值,而访问后两个字节的话,和charCodeAt的方法是一样的,
var b="𠮷a";
//直接返回正确的16进制编码,在第2的时候才会打印到字符串a,因此,这个方法也是不正确的,我们后面用到了 for...of的方法来解决
b.codePointAt(0);
b.codePointAt(1);
b.codePointAt(2);
for (let ch of b) {
  console.log(ch.codePointAt(0).toString(16));
}
//会正确的打印
// 20bb7
// 61
//codePointAt方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString方法转换一下。
b.codePointAt(0).toString(16) // "20bb7"

// codePointAt方法用来测试字符串是否为2个字节还是四个字节还是可以的
function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}

is32Bit("𠮷") // true
is32Bit("a") // false

// 3.String.fromCodePoint()

// ES5中的String.fromCharCode()不能识别码点大于0xFFFF;因此,ES6有了个方法 String.fromCodePoint(),来识别超过的可以识别;

// 注意,fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。


// 4.字符串的遍历接口

// es6添加了方法,使得可以遍历字符串,这个遍历器还可以识别码点大于0xffff的
for ( let codePoint of "foo") {
    console.log(codePoint);
}

var text = String.fromCodePoint(0x20BB7);

for (let i = 0; i < text.length; i++) {
  console.log(text[i]);
}
// " "
// " "

for (let i of text) {
  console.log(i);
}
// "𠮷"

// 5.在es6的提案中有at方法来替代之前的charAt的方法,来可以识别超过0xffff的字符,这个方法还不行呀;

'abc'.charAt(0) // "a"
'𠮷'.charAt(0) // "\uD842"

// 'abc'.at(0)
 // "a"
// '𠮷'.at(0)
// "𠮷"


// 6.normalize() ,用来将简单的码点可以不让他们合成,从而拆解
// normalize方法可以接受一个参数来指定normalize的方式,参数的四个可选值如下。
//
// NFC,默认参数,表示“标准等价合成”(Normalization Form Canonical Composition),返回多个简单字符的合成字符。所谓“标准等价”指的是视觉和语义上的等价。
// NFD,表示“标准等价分解”(Normalization Form Canonical Decomposition),即在标准等价的前提下,返回合成字符分解的多个简单字符。
// NFKC,表示“兼容等价合成”(Normalization Form Compatibility Composition),返回合成字符。所谓“兼容等价”指的是语义上存在等价,但视觉上不等价,比如“囍”和“喜喜”。(这只是用来举例,normalize方法不能识别中文。)
// NFKD,表示“兼容等价分解”(Normalization Form Compatibility Decomposition),即在兼容等价的前提下,返回合成字符分解的多个简单字符。

'\u004F\u030C'.normalize('NFC').length // 1
'\u004F\u030C'.normalize('NFD').length // 2

// 7.includes(), startsWith(), endsWith()

// 传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法,这个三个方法都支持第二个参数来从某个位置开始搜索
// includes():返回布尔值,表示是否找到了参数字符串。
// startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
// endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

// 8.repeat方法,返回新的字符串然后重复N次;参数是小数会向下取整,如果repeat的参数是负数或者Infinity,会报错。
//字符串会自动转数字,NaN则默认为0,0到1由于向下取整,也是0;
"na".repeat(2.9);//nana
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError

// 9.padStart(),padEnd()
// ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
// 如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
// 如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
// 如果省略第二个参数,默认使用空格补全长度。
// padStart的常见用途是为数值补全指定位数。下面代码生成10位的数值字符串。
// 另一个用途是提示字符串格式。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

// 10.字符串模板。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容