ECMAScript 6 入门-字符串的扩展

2023-05-16

codePointAt()

charAt() 方法可返回指定位置的字符。
用法:stringObject.charAt(index)
参数:index:必需。表示字符串中某个位置的数字,即字符在字符串中的下标。

let str="zhangxing";
console.log(str.charAt(1)); //h

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
用法:stringObject.charCodeAt(index)
参数:index:必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
注释:字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。

let str="zhangxing";
console.log(str.charCodeAt(0)); //122

codePointAt方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。方法返回 一个 Unicode 编码点值的非负整数。
用法:str.codePointAt(pos)
参数:pos这个字符串中需要转码的元素的位置。
codePointAt方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString方法转换一下s.codePointAt(2).toString(16)

let str="zhangxing";
console.log(str.codePointAt(0)); //122

String.fromCodePoint()

ES5 提供String.fromCharCode方法,用于从码点返回对应字符,但是这个方法不能识别 32 位的 UTF-16 字符(Unicode 编号大于0xFFFF)。

String.fromCharCode(0x20BB7)
// "ஷ"

ES6 提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

String.fromCodePoint(0x20BB7)
// "?"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true

上面代码中,如果String.fromCodePoint方法有多个参数,则它们会被合并成一个字符串返回。
注意,fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

字符串的遍历器接口

ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。

let str="zhangxing";
for(let i of str){
    console.log(i);
}
//z h a n g ....

includes(), startsWith(), endsWith()

传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。

includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

这三个方法都支持第二个参数,表示开始搜索的位置。

let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

上面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

repeat()

repeat方法返回一个新字符串,表示将原字符串重复n次。

"si".repeat(10);//sisisisisisisisisisi

padStart(),padEnd()

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

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

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

上面代码中,padStart和padEnd一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。

如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。

'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'

如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。

'abc'.padStart(10, '0123456789')
// '0123456abc'

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

'x'.padStart(4) // '   x'
'x'.padEnd(4) // 'x   '

padStart的常见用途是为数值补全指定位数。下面代码生成 10 位的数值字符串。

'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"

另一个用途是提示字符串格式

'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
//如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。
let greeting = `\`Yo\` World!`;

如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`.trim());
//上面代码中,所有模板字符串的空格和换行,都是被保留的,比如<ul>标签前面会有一个换行。如果你不想要这个
//换行,可以使用trim方法消除它。

模板字符串中嵌入变量,需要将变量名写在${}之中。大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

let x = 1;
let y = 2;

`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"

`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"

let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"

模板字符串之中还能调用函数。

function fn() {
  return "Hello World";
}

`foo ${fn()} bar`
// foo Hello World bar

模板字符串甚至还能嵌套。

const tmpl = addrs => `
  <table>
  ${addrs.map(addr => `
    <tr><td>${addr.first}</td></tr>
    <tr><td>${addr.last}</td></tr>
  `).join('')}
  </table>
`;

上面代码中,模板字符串的变量之中,又嵌入了另一个模板字符串,使用方法如下。

const data = [
    { first: '<Jane>', last: 'Bond' },
    { first: 'Lars', last: '<Croft>' },
];

console.log(tmpl(data));
// <table>
//
//   <tr><td><Jane></td></tr>
//   <tr><td>Bond</td></tr>
//
//   <tr><td>Lars</td></tr>
//   <tr><td><Croft></td></tr>
//
// </table>

如果需要引用模板字符串本身,在需要时执行,可以像下面这样写。

// 写法一
let str = 'return ' + '`Hello ${name}!`';
let func = new Function('name', str);
func('Jack') // "Hello Jack!"

// 写法二
let str = '(name) => `Hello ${name}!`';
let func = eval.call(null, str);
func('Jack') // "Hello Jack!"

String.raw()

String.raw() 是一个模板字符串的标签函数,是用来获取一个模板字符串的原始字面量值的。
用法:String.raw(callSite, ...substitutions)
String.rawtemplateString`
参数:
callSite一个模板字符串的“调用点对象”。类似{ raw: [‘foo’, ‘bar’, ‘baz’] }
…substitutions任意个可选的参数,表示任意个内插表达式对应的值。
templateString`:模板字符串。
返回:给定模板字符串的原始字面量值。

String.raw `Hi\n!`;                 
// "Hi\\n!",这里得到的不是 Hi 后面跟个换行符,而是跟着 \ 和 n 两个字符

String.raw `Hi\u000A!`;             
// "Hi\\u000A!",同上,这里得到的会是 \、u、0、0、0、A 6个字符,
// 任何类型的转义形式都会失效,保留原样输出,不信你试试.length

let name = "Bob";
String.raw `Hi\n${name}!`;             
// "Hi\\nBob!",内插表达式还可以正常运行

String.raw({raw: "test"}, 0, 1, 2); 
// "t0e1s2t",我认为你通常不需要把它当成普通函数来调用12345678910111213

参考链接阮一峰:http://es6.ruanyifeng.com/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ECMAScript 6 入门-字符串的扩展 的相关文章

  • 3D背景图动画阴影效果

    先看效果图 原理rotate的使用 当鼠标放到图片的一角处的时候 xff0c 实现该处向下坍缩的效果 xff0c 即用的是rotate的3D属性 xff0c 此时的图片向相应的方向的进行偏转 xff0c 偏转的角度x xff0c y如下图所
  • Vue遇到的bug-01(vue引擎模板报错)

    vue结合webpack的使用 01 报错信息 xff1a 如下图 xff08 配置文件格式错误 xff09 错误的代码 xff1a 如下图 报错信息显示的是配置文件错误 xff08 报错信息的最后一句话是 loaders should b
  • 百度地图API支持HTTPS

    百度地图怎么样才能支持API支持HTTPS 报错信息如下 xff1a Mixed Content The page at https www c 8 com public admin index index html was loaded
  • 数组Array、对象Object、json格式常用的方法小结。

    一 对象Object常用方法 1 初始化方法 var obj 61 var obj 61 new obj var obj 61 Object create null 2 添加元素的方法 dic key 61 value 3 删除key的方法
  • 微信小程序动画特效

    效果 代码见下 xff1a 启动的一瞬间字体在跳动 xff0c 星空在不停的旋转 wxml代码 lt pages welcome welcome wxml gt br lt view class 61 34 stars 34 gt br l
  • 放大镜插件etalage的使用方法

    效果图 如果有人需要etalage的话 xff0c 可以给我留言 xff1b 官方链接Etalage 下载位置 xff1a github 1 使用方法 安装js xff0c css xff0c 文件 xff0c 分别是 xff1a 1 xf
  • 日期插件layDate的使用

    效果图 官方链接 1 layui中的laydate 官方链接 2 贤心的layui 使用说明 只需引入 laydate js 即可HTML结构 lt input span class hljs keyword type span 61 sp
  • jQuery实现可以编辑的表格实例详解

    效果图 点击单个可以进行修改 点击修改所有的表格都可以进行修改 点击保存所有的数据可以获取并打印出来 本人demo需要引入jq文件 代码见如下 xff08 有详细的注解 xff09 span class hljs doctype lt DO
  • input上传图片并预览

    首先说一下input 大家都知道上传文件 xff0c 图片是通过input 的file进行上传的 1 首先是样式 大家都知道input在HTML的代码为 lt input type 61 34 file 34 gt xff1b 在页面的样式
  • PyQt5 使用QT Desinger 布置QChartViewer

    QChartView原来是QT公司的商用包 xff0c 后来开源了 但是相对来说文档说明少 最近想利用QT DESINGER直接拖拉拽在GUI窗体里放QChartViewer xff0c 网上参考部分资料后顺利实现 xff0c 现留作备忘
  • js拳皇特效

    js拳皇特效 效果图 很简单的特效 xff0c 运用了面向对象 xff0c 原型等简单的方法 废话不多说 xff0c 上代码 xff1a span class hljs tag lt span class hljs title script
  • 微信小程序从入门到放弃(七)

    scroll view不显示滚动条 新版本的微信小程序已经把scroll view的滚动条默认为隐藏了 xff0c 而有的业务逻辑需要把滚动条显示出来 xff1b 所以 xff1a 本人查了好久终于找到了解决的方案 xff0c 就是找到滚动
  • cookie+bootstrap-table+抽奖概率算法

    span class hljs comment 获得cookie span span class hljs function span class hljs keyword function span span class hljs tit
  • Vue新手入门-1

    基于vue2 5 9版本 数据绑定v bind 像img这样的标签 xff0c 直接在src里面写 lt img src 61 34 picimg 34 alt 61 34 34 gt xff1b 是不正确的 xff0c 这里需要用v bi
  • Vue新手入门-2

    基于vue2 5 9版本 生命周期vue1 0 created gt beforeCompile gt compiled gt ready gt attached gt detached gt beforeDestroy gt destro
  • cropper.js 裁剪图片并上传(文档翻译+demo)

    官网http fengyuanchen github io cropper 文档https github com fengyuanchen cropper blob master README md v3 x版本 引入 43 使用 span
  • Vue新手入门-3

    基于vue2 5 9版本 定义全局组件 xff08 3种写法 xff09 首先声明一个new Vue xff08 xff09 xff1b 然后在js里面编写 xff1b 最后把注册的组件放入进去即可 xff1b 写法 1 span clas
  • Vue遇到的bug-02(vue中修改了数据但视图无法更新的情况)

    基于vue2 5 9版本 vue中修改了数据但视图无法更新的情况 最近的项目需要用vue处理数组和json的数据类型发现一些问题在这里简单的列举一下 xff1b 因为 JavaScript 的限制 xff0c Vue js 不能检测到下面数
  • Vue遇到的bug-03(VUE之使用高德地图API)

    步骤一 xff1a 申请高德地图密钥 xff1b 步骤二 xff1a 在index html中添加高德地图JavaScript API接口 xff1b span class hljs tag lt span class hljs title
  • 纯css模仿微信switch开关按钮

    业务需要需要做一个微信switch开关 效果图 html样式 span class hljs tag lt span class hljs title label span gt span span class hljs tag lt sp

随机推荐

  • SDN实验环境的搭建UBUNTU 14LTS+MININET+RYU

    RYU是NTT主推的开源SDN 控制器项目 xff0c 采用PYTHON语言 因为工作需要 xff0c 进行了一些尝试 xff0c 现将基础环境的搭建和相关参考资料记录如下 1 系统选择UBUNTU 14 LTS xff0c 采用VMWAR
  • 移动端开发小记

    meta 在我们开发移动端的时候 xff0c 首先在head里面写入如下的代码 span class hljs tag lt span class hljs title meta span span class hljs attribute
  • less 简单用法

    less 示例 声明变量 用 64 span class token atrule span class token rule 64 man color span span class token punctuation span f0f0
  • javascript性能优化(1)

    加载 1 javascript的第一条定律 xff1a 将脚本 xff08 js xff09 放到底部 2 每一个http请求都会造成额外的性能负担 xff0c 下载一个100k的文件比下载四个25k的文件要快 xff1b 减少引用外部脚本
  • javascript性能优化(2)

    数据访问 四种基本数据类型 xff1a 1 直接量 xff1a 仅是自身不存储于特定位置 包括 xff1a 字符串 数字 布尔值 对象 数组 函数 正则表达式 xff0c 具有特殊意义的空值 xff0c 以及未定义 2 变量 xff1a v
  • javascript性能优化(3)

    DOM编程 1 文档对象模型 xff08 DOM xff09 访问的dom越多 xff0c 代码的执行速度就越慢 2 innerHtml和DOM方法 更改dom的时候 xff0c 使用innerHTML xff08 字符串拼接 xff09
  • javascript性能优化(4)

    算法和流程控制 代码整体结构是执行速度的决定因素之一 代码量少不一定运行速度快 xff0c 代码量多也不一定运行速度慢 性能损失与代码组织方式和具体问题解决办法直接相关 循环 1 减少对象成员和数组项查找的次数 span class hlj
  • javascript性能优化(5)

    字符串和正则表达式 span class hljs keyword str span 61 span class hljs string 34 a 34 span 43 span class hljs string 34 b 34 span
  • javascript性能优化(6)

    响应接口 长运行脚本 xff08 500万以上 xff09 最好的办法就是避免他们 接口最好在100毫秒响应用户输入 用定时器让出时间片 当一些JavaScript任务不能再100ms之内完成的时候 xff0c 最好的办法就是 xff1a
  • 一些简单的JavaScript加密/解密

    UTF8编码与解码 xff1a span class hljs function span class hljs keyword function span span class hljs title encodeUTF8 span spa
  • git的基本操作

    新上手一个项目 xff0c 难免会忘记git的一些操作指令 xff0c 于是趁现在工作不是很忙 xff0c 自己便整理一下git的一些基本指令 git拉取远程数据 xff0c 并建立新的分支 git clone url 克隆远程仓库代码 g
  • git clone 加速方法

    查询github global ssl fastly net和github com的IP 安装查询工具 xff1a sudo apt install dnsutils nslookup github com nslookup github
  • javascript性能优化(7)

    Ajax 异步 JavaScript 和 XML Ajax 是高性能 JavaScript 的基石 它可以通过延迟下载大量资源使页面加载更快 它通过在客户端和服 务器之间异步传送数据 xff0c 避免页面集体加载 它还用于在一次 HTTP
  • javascript性能优化(8)

    Programming Practices 编程实践 避免二次评估 JavaScript 与许多脚本语言一样 xff0c 允许你在程序中获取一个包含代码的字符串然后运行它 有四种标准 方法可以实现 xff1a eval xff0c Func
  • 编写可维护的JavaScript-编程风格

    可以使用JSHint对代码进行检查 代码规范可以是使开发更高效 基本的格式化 缩进层级 使用制表符进行缩进 Tab使用空格进行缩进 语句结尾 是不是使用分号看个人喜好 xff0c 书上推荐是不使用 xff1b 但是jshint等工具 xff
  • 编写可维护的JavaScript-编程实践

    UI层的松耦合 1 将JavaScript从css中抽离出来 xff1b 现在大部分已经不支持 xff1b 2 将css从JavaScript中抽离出来 不要直接在js内添加样式 xff1b 如 xff1a e style color 61
  • 编写可维护的JavaScript-自动化

    自动化的利弊 优点 xff1a 本地的源代码不必同生产环境保持一致 xff0c 所以你可以任意组织你的代码结构而不必担心在服务器上使用的代码是否需要优化 静态分析可以自动发现错误 在部署之前有多种方式处理JavaScript xff0c 比
  • ECMAScript 6 入门-Babel

    配置文件 babelrc 直接在项目的跟目录下建立 babelrc的文件 xff1b 具体方法 xff1a 可以在控制台输入echo null gt babelrc xff1b 回车即可 该文件用来设置转码规则和插件 xff0c 基本格式如
  • ECMAScript 6 入门-变量的解构赋值

    数组的解构赋值 原文链接 详细的内容我就不说了 xff0c 大家自己打开链接自己看看吧 xff0c 我再怎么说也是拾人牙慧 xff1b 我只是摘抄一段放入博客内吧 xff1b 用途 变量的解构赋值用途很多 xff08 1 xff09 交换变
  • ECMAScript 6 入门-字符串的扩展

    codePointAt charAt 方法可返回指定位置的字符 用法 xff1a stringObject charAt index xff1b 参数 xff1a index 必需 表示字符串中某个位置的数字 xff0c 即字符在字符串中的