ES6 学习笔记(六)基本类型String
字符串String
1、字面量
需要注意的地方:
- 由单引号或双引号括起来的字符序列。
- 单双引号可以嵌套,由最外围引号定界字符串
- 字符串字面量可以拆分成数行,每行必须以反斜线(\)结束,且反斜线都不计入字符串的内容。
- 在书写HTML的JS代码时,要注意与HTML代码混合搭配使用引号。
实例代码:
let str1 = "I have a dog"
let str2 = "My 'dog' likes \
eating meat"
console.log(str1) // I have a dog
console.log(str2);// My 'dog' likes eating meat
// 点击弹出hello
<button onclick="alert('hello')"></button>
2、转义字符
类型 | 描述 |
---|---|
\’ | 单引号 |
\” | 双引号 |
\n | 换行 |
\r | 回车 |
\ | 反斜线 |
\xA9 | 十六进制数表示Latin-1编码的版权符号 |
\u03C0 | 表示Unicode编码的字符π |
3、字符的Unicode表示法
- JavaScript允许采用\uxxxx形式表示一个字符。其中,xxxx表示字符的Unicode编码。如:”\u0061”表示“a”
- 这种编码仅能表示\u0000~\uFFFF之间的字符。
- 超出这个范围的字符,必须采用2个双字节的形式表示。
如:”\uD842\uDFB7”表示“?” - 超过这个范围的编码则会被截取。如:”\u20BB7”---->"₻7"
- 超出这个范围的字符,必须采用2个双字节的形式表示。
- ES6提出的改进方案,利用大括号将整个编码括起来,从而识别为一个字符。如:”\u{20BB7}”表示”?”
4、String方法
- +表示字符串拼接。
let s1 = "Java"
let s2 = "Scripts"
console.log(s1 + s2) // JavaScripts
console.log("abc" + { value: 10 }) // abc[object Object] 类型名 构造函数名
console.log("abc" + { value: 10, toString: function () { return this.value.toString(); } }); // abc10 - String(),toString(),valueof()。
- String()直接将传入的参数转化为字符串
- toString()返回字符串描述
- valueof()返回原始值
let str = new String("abc123")
console.log(str.valueOf()); // abc123
console.log(str.toString()); // abc123
console.log(new Date().valueOf()) // 1617794519537
5、String构造函数
通过new调用String()则会返回一个字符串对象
let a = 100;
console.log(typeof String(a)); // string
console.log(typeof new String(a)); // object
console.log(new String(a).length); // 3
6、字符串对象
- ES5常用方法
es5方法 | 描述 |
---|---|
charAt() | 返回在指定位置的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
indexOf() | 返回某个指定的字符串值在字符串中首次出现的位置 |
lastIndexOf() | 从后向前搜索字符串,返回最后一次出现的索引 |
split() | 把字符串分割为字符串数组 |
replace() | 在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串 |
concat() | 拼接两个或更多字符串,并返回新的字符串 |
toUpperCase() | 把字符串转换为大写 |
toLowerCase() | 把字符串转换为小写 |
trim() | 去除字符串两端的空格 |
实例代码:
let s2 = "hello,javascript"
s2.charAt(0) //返回下标为0的字符 h
s2.substring(1,4) // 截取索引为1-3的字符 ell
s2.slice(1,4)// 截取索引为1-3的字符 ell
s2.slice(-3) // 从后往前数3个,截取时从左至右 ipt
s2.substr(2,3) // 从2开始,截取3个 llo
s2.indexOf("l") //得到第一次出现的下标 2
s2.lastIndexOf("l") // 最后一次出现的索引 3
s2.indexOf("l",3) // 3表示第一次出现位置 3
s2.split(", ") //分割字符串 ["hello,javascript"]
s2.replace("s","S") // 原字符串不变化 "hello,javaScript"
s2.concat("!") //拼接 "hello,javascript!"
s2.toUpperCase() //大写 "HELLO,JAVASCRIPT"
" abc ".trim() //去除两端的空格 "abc"
- ES6常用方法
es6方法 | 描述 |
---|---|
charCodeAt() | 返回在指定的位置的字符的 Unicode 编码 |
String.fromCharCode() | 将 Unicode 编码转为字符 |
String.fromCodePoint() | 静态方法返回使用指定的代码点序列创建的字符串 |
valueOf() | 返回字符串对象的原始值 |
search() | 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,要执行忽略大小写的检索,追加 i。如果没有找到任何匹配的子串,则返回 -1 |
match() | 用于查找字符串中指定的值,或找到一个或多个正则表达式的匹配,返回指定的值 |
startsWith() | 查看字符串是否以指定的子字符串开头 |
endsWith() | 查看字符串是否以指定的子字符串结尾 |
includes() | 查找字符串中是否包含指定的子字符串 |
repeat() | 复制字符串指定次数,并将它们连接在一起返回 |
padStart() | 用另一个字符串填充当前字符串(如果需要的话,会重复多次),以便产生的字符串达到给定的长度。从当前字符串的左侧(头部)开始填充。 |
padEnd() | 用另一个字符串填充当前字符串(如果需要的话,会重复多次),以便产生的字符串达到给定的长度。从当前字符串的右侧(末尾)开始填充。 |
实例代码:
let s = String("\u{20bb7}");
let c0 = s.charCodeAt(0)
let c1 = s.charCodeAt(1)
let point = s.codePointAt(0)
console.log(s); // ?
console.log(c0); // 55362
console.log(c1); // 57271
console.log(point); // 134071
console.log(String.fromCharCode(point)); // ஷ
console.log(String.fromCharCode(c0, c1)); // ?
console.log(String.fromCodePoint(point)); // ?
let str = "123abcd45678EFG90"
console.log(str.valueOf()); // "123abcd45678EFG90"
console.log(str.match(/\d/g)) // ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
console.log(str.search(/abc/)) // 3
let s = "Hello JavaScript!"
console.log(s.startsWith("He")); // true
console.log(s.endsWith("pt!")); // true
console.log(s.includes("Ja")) // true
console.log(s.indexOf("aa")) // -1
console.log(s*2) // NaN
console.log(s.repeat(2)) // Hello JavaScript!Hello JavaScript!
console.log(s.repeat(0.2)) //
console.log(s.repeat(1.9)) // Hello JavaScript!
let s2 = "Go"
console.log(s2.padStart(5, "JS")) // JSJGo
console.log(s2.padEnd(5, "JS")) // GoJSJ
console.log(s2.padStart(10, '01234567')) // 01234567Go
7、需要注意的细节
7.1 示例1
new String(100) == new String(100)
String(100) == new String(100)
输出结果:
false
true
原因:
第一个,引用值比较的是它的引用,引用不同,所以结果为false
第二个,原始值与引用值相比较,引用值先要进行拆箱,才能进行比较
7.2 示例2
let s = "This is a dog"
let str = s.slice(2, 6)
console.log(str);
输出结果:
is i
这里的slice方法是截取小标为2-6的字符,不包括6。
- 为什么这里能使用s.slice呢?
原因:
这里的s是临时创建的一个包装对象(可以看成进行了一个new String的操作),所以可以使用s.slice方法,在调用完slice就消失掉了。
ES6 学习笔记(六)基本类型String的更多相关文章
- ES6学习笔记六:迭代
一:迭代器 它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). ES6创造了一种新的遍历命令for. ...
- rabbitMQ学习笔记(六) topic类型消息。
上一节中使用了消息路由,消费者可以选择性的接收消息. 但是这样还是不够灵活. 比如某个消费者要订阅娱乐新闻消息 . 包括新浪.网易.腾讯的娱乐新闻.那么消费者就需要绑定三次,分别绑定这三个网站的消息类 ...
- ES6学习笔记六(Iterator和for..of)
{ let arr=['hello','world']; let map=arr[Symbol.iterator](); //返回false时继续执行,true停止执行! console.log(ma ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
随机推荐
- 论文解读(PairNorm)《PairNorm: Tackling Oversmoothing in GNNs》
论文信息 论文标题:PairNorm: Tackling Oversmoothing in GNNs论文作者:Lingxiao Zhao, Leman Akoglu论文来源:2020,ICLR论文地址 ...
- LOJ#2014「SCOI2016」萌萌哒(倍增,并查集优化连边)
题面 点此看题 题意很明白,就不转述了吧. 题解 题目相当于告诉了我们若干等量关系,每个限制 l 1 , r 1 , l 2 , r 2 \tt l_1,r_1,l_2,r_2 l1,r1,l2 ...
- ABC206 F - Interval Game 2 (区间DP,博弈论,SG函数)
题面 题意很简单 A l i c e \tt Alice Alice 和 B o b \tt Bob Bob 在博弈.摆在他们面前有 N \rm N N 个区间 [ l i , r i ) \rm[l ...
- qt调用quit()后未结束线程解决方案
正常操作 正常写Qt的多线程,需要继承QThread,然后重写run函数,调用start后,在run函数中实现子线程的运行,这个时候会开启事件循环,可以调用quit()函数来结束当前的线程. 其他操作 ...
- day32-线程基础02
线程基础02 3.继承Thread和实现Runnable的区别 从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thre ...
- KingbaseES where 条件解析顺序
概述 KingbaseES 对于where 条件的解析严格遵守"从左到右"的原则,因此,对于选择性比较强的条件,进行最先过滤是有利于性能的. 一.KingbaseES 1.条件顺序 ...
- 输入法词库解析(二)搜狗拼音细胞词库.scel(.qcel)
详细代码:https://github.com/cxcn/dtool 前言 .scel 是搜狗拼音输入法所使用的细胞词库格式,可以在 https://pinyin.sogou.com/dict/ 下载 ...
- 【疑难杂症】关于pytorch安装的一些问题
问题一:选用哪个版本 直接下载Anaconda,会自动给你附加最合适的python版本,再去pytorch官网直接找到自己需要的版本下载 问题二:下载pytorch速度太慢 直接把下载代码最后面的-c ...
- 使用Prometheus和Grafana监控emqx集群
以 Prometheus为例: emqx_prometheus 支持将数据推送至 Pushgateway 中,然后再由 Promethues Server 拉取进行存储. 注意:emqx_promet ...
- 第六章:Django 综合篇 - 7:网站地图sitemap
网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指 ...