ES6 学习笔记之《字符串的扩展》
来源:互联网 发布:犀牛社淘宝论坛 编辑:程序博客网 时间:2024/05/30 13:41
- for-of
ES6为字符串添加了遍历器接口,使得字符串可以被for-of循环遍历。
for(let i of 'foo'){ console.log(i)}//'f'//'o'//'o'
但是其实这种需求用for循环也是可以实现的
var x = 'foo';for(let i =0;i<x.length;i++){ console.log(x[i]);}
如果完全一样,那么ES6也不会推出这个接口,那么两者的差别在哪呢?
for-of遍历器的优点在于可以识别大于0xFFFF的码点,而传统的ofr循环时无法识别这样的码点的。
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);}//"��"
上面代码中,字符串text只有一个字符,但是for循环会认为它包含两个字符(都不可打印),而for-of循环会正确识别出一个字符。
- at()
ES5为字符串对象提供了charAt方法,返回字符串给定位置的字符。
ES6推出了at方法,也是返回字符串给定位置的字符。
两者的区别在于,at方法可以识别大于0xFFFF的字符编码,返回正确的字符。而charAt仅仅是返回字符编码的第一个字节,实际上是无法显示的。
'��'.charAt(0); //'' 这里显示不出来的,是第一个字节编码'��'.at(0); //'��'
3.includes(),startWith(),endsWith()
传统上,javaScript只有indexOf方法,可以用来确定一个字符串中是否包含在另一个字符串中。
ES6现在又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startWith():返回布尔值,表示参数字符串是否在源字符串的头部。
- endsWith() : 返回布尔值,表示参数字符串是否在源字符串的尾部。
var s = 'Hello world!';s.includes('l');s.startsWith('H');s.endsWith('!');
这三个方法还支持第二个参数,表示开始检索的位置。
但是需要注意的是,endsWith()的第二个参数,是表示字符串的前n个字符,而不是其他两个方法所指的从第n个字符开始检索。
var s = 'Hello world!';s.startsWith('world', 6) // trues.endsWith('Hello', 5) // trues.includes('Hello', 6) // false
4.repeat()
repeat()方法返回一个新字符串,表示将原字符串重复n次。
'x'.repeat(3) // "xxx"'hello'.repeat(2) // "hellohello"'na'.repeat(0) // ""
参数如果是小数的话,会被向靠近于0的方向取整。也就是说当参数为-1~0的时候,参数取整为0。
'na'.repeat(2.9) // "nana"
如果参数是负数或者Infinity的时候,会报错。
'na'.repeat(Infinity)// RangeError'na'.repeat(-1)// RangeError
如果repeat的参数是字符串,则会先转换成数字。
'na'.repeat('na') // ""'na'.repeat('3') // "nanana"
5.padStart(),padEnd()
ES7推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart用于头部补全,padEnd用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx''x'.padStart(4, 'ab') // 'abax''x'.padEnd(5, 'ab') // 'xabab''x'.padEnd(4, 'ab') // 'xaba'
如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx''xxx'.padEnd(2, 'ab') // 'xxx'
如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
'abc'.padStart(10, '0123456789')// '0123456abc'
如果省略了第二个参数,那么就会用空格来补全长度。
'x'.padStart(4) // ' x''x'.padEnd(4) // 'x '
6.模板字符串
传统的JavaScript语言,输出模板是这样的:
$('#result').append( 'There are <b>' + basket.count + '</b> ' + 'items in your basket, ' + '<em>' + basket.onSale + '</em> are on sale!');
上面这种写法比较繁琐,所以ES6引入了模板字符串来解决这个问题。
$('#result').append(` There are <b>${basket.count}</b> items in your basket, <em>${basket.onSale}</em> are on sale!`);
模板字符串是增强版字符串,用反引号(`)来标识。它可以当普通字符串来使用,也可以定义多行字符串,或者在字符串中嵌入变量。
//普通字符串`In JavaScript '\n' is a line-feed.`//多行字符串`In JavaScript this isnot legal.`console.log(`string text line 1string text line 2`);//字符串中嵌入变量var name = 'Bob', time = 'today';`Hello ${name},how are you ${time}`
模板字符串中嵌入变量的时候,需要将变量名写在${}之中。
- ES6 学习笔记之《字符串的扩展》
- js-ES6学习笔记-字符串的扩展
- ES6学习笔记-字符串扩展
- ES6 学习笔记之《数值的扩展》
- ES6 学习笔记之《数组的扩展》
- ES6 学习笔记之《函数的扩展》
- 学习笔记:ES6之字符串扩展(重要)
- es6学习--字符串的扩展
- React全家同学习之ES6之字符串的扩展
- ES6学习笔记(三)字符串的扩展
- ES6学习笔记(三)--字符串扩展
- ES6学习之路(三) 字符串扩展
- ES6学习笔记二之数组的扩展
- 学习笔记:ES6之正则扩展
- 学习笔记:ES6之数值扩展
- 学习笔记:ES6之对象扩展
- ES6学习4章:字符串的扩展
- ES6系列之---字符串的扩展函数
- 布隆过滤(Bloom Filter)-必须了解的优化器算法
- C语言函数参数以及函数参数的传递
- 三种校验方法
- Ubuntu 秘笈之命令行下管理浏览器书签
- 实验_3_7_Chat
- ES6 学习笔记之《字符串的扩展》
- LeetCode242详细分析并附求解代码
- 线程解析之概念
- struts2中的Action接收表单传递过来的参数有3种方法
- Date问题
- C语言typedef的用法
- 第三方开源库:日期时间选择器(TimePickerDialog)+ 省市区三级联动(CityPicker) + 一级滚动
- Ajax实例-地域查询匹配
- webview有两个方法:setWebChromeClient和setWebClient