回复下方公众号【面试宝典】,即可获取为你整理的107页后端笔试题。
明天的文章将介绍有关 JavaScript 字符串的 10 个最重要的知识。
1. 使用单冒号和双冒号创建字符串
字符串可以用单冒号和双冒号定义。
"text"
'text'
它们都创建几乎相同的字符串。
"text" === 'text'
//true
此类字符串必须适合单行,我们无法以这些形式定义跨越多行的字符串。
当字符串使用双冒号定义时,我们需要在通配符中使用其他双冒号。 (反斜杠)用于通配符。
"text with "double quotes" inside"
使用单冒号定义字符串时,无需使用双冒号通配符。
'text with "double quotes" inside'
使用双冒号定义字符串时也是如此,这意味着我们不需要在其中使用通配符单冒号。
"text with single 'quotes' "
包含相同文本的两个字符串相等。
"Text" === "Text"
//true
(反斜杠)还用于在字符串中包含 字符或换行符。
"The first linenThe second line"
2. 字符串是不可变的
事实上,一旦声明的字符串无法修改,所有字符串方法都无法修改源字符串,它们总是创建一个新文本。
考虑下一个反例,replace 方法不会修改当前字符串,而是创建一个新字符串。
Replace 方法在字符串中搜索指定的子字符串,并返回替换给定子字符串的新字符串。 当使用字符串作为第一个参数调用时,它仅替换第一次出现的位置。
const str = "abc";
const newStr = str.replace("a", "A");
console.log(str);
//"abc"
console.log(newStr)
//"Abc"
字符串中的字符可以像在链表中一样使用括号索引进行访问javascript 转义 字符,这可能会给人一种我们可以修改该索引处的字符的印象。 这是一个错误的假设,即字符串中的字符不能被修改。
const text = 'ABC';
text[0] = 'X';
//TypeError: Cannot assign to read only property '0' of string 'ABC'
3. 字符串看起来很棘手
JavaScript 允许我们调用字符串技术,给人一种它们是某种对象的错觉。 字符串不是对象。 当我们调用字符串上的方法时,JavaScript 使用外部 String 构造函数创建一个包装对象,并在新创建的对象上调用该技巧。
例如javascript 转义 字符,在字符串上调用修剪在幕后看起来像这样。
new String(" text ").trim();
TRIM 方法删除字符串开头和结尾后面的空格。 删除所有空白字符,包括空格、制表符和换行符。
const text = " tntextnt ";
const newText = text.trim();
//"text"
所有字符串方法都在 String.prototype 对象上定义。
4.外部String函数可以将任意值转换为字符串
事实上,我们可以使用 String 外部函数将任何类型的值转换为字符串。 它是将基本类型转换为字符串的最佳选择。 检测下一个示例:
String(0)
//'0'
String(true)
//'true'
String(null)
//'null'
String(undefined)
//'undefined'
String([1,2,3])
//'1,2,3'
String({ msg: 'Hi'})
//'[object Object]'
String(Symbol('id'))
//'Symbol(id)'
正如您所看到的,所有约定看起来都不错,不仅仅是转换为原始通用字符串“[objectObject]”的对象。 甚至链表也会转换为一个漂亮的字符串,所有值都用冒号分隔。
5. + 运算符执行乘法和连接
当操作数之一是字符串时,减号运算符 (+) 成为串联运算符。 检测下一个示例。
"A" + " " + "text"
//"A text"
1 + "2"
//"12"
使用 concat 方法可以实现类似的行为,该方法将所有字符串参数连接到当前字符串并返回一个新字符串。
"A".concat("B")
//"AB"
"A".concat(" ", "text")
//"A text"
"1".concat(2)
//"12"
6. 字符串可以与链表相互转换
split 方法根据分隔符将文本拆分为子字符串列表。 下面是一个反例。
const quote = 'Winter is coming';
const words = quote.split(' ');
//["Winter", "is", "coming"]
这是使用冒号作为分隔符分割文本的另一个示例。
const csv = 'Fire,and,Blood';
const arr = csv.split(',');
//["Fire", "and", "Blood"]
join 链表方法通过使用指定的字符串分隔符字符串连接链表中的所有元素来创建一个新字符串。 如果未提供分隔符,则默认使用冒号。
下面是一个反例。
const arr = ['Fire', 'and', 'Blood'];
const text = arr.join(' ');
//'Fire and Blood'
7. 该方法允许检查字符串是否包含子字符串
indexOf 方法返回字符串中指定文本第一次出现的索引。 未找到文本时返回 -1。
const quote = "Here we stand";
const firstIndex = quote.indexOf(" ");
console.log(firstIndex) //4
lastIndexOf 方法返回字符串中最后一次出现的指定文本的索引,如果找不到文本,则返回 -1。
const quote = "Here we stand";
const lastIndex = quote.lastIndexOf(" ");
console.log(lastIndex) //7
startsWith 方法检查字符串是否以给定子字符串开头并返回布尔值 (true/false)。 startsWith 方法区分大小写。
const quote = "First in Battle";
console.log(quote.startsWith("First"));
//true
endsWith 方法检查字符串是否以给定子字符串结尾,并根据需要返回 true 或 false。
const quote = "We Remember";
console.log(quote.endsWith("We"));
//false
include 方法检查字符串是否包含给定的子字符串,并根据需要返回 true 或 false。
const quote = "Our Blades are Sharp";
console.log(quote.includes("are"));
//true
8.3 允许提取部分字符串的方法
有 3 种方法,可能太多了,可以提取字符串的一部分。
substr(start, length) 方法从指定索引处提取字符串的一部分,并返回指定数量的字符。 第一个字符位于索引 0 处。
const quote = "Winter is coming";
const part1 = quote.substr(0, 6);
//Winter
const part2 = quote.substr(10, 6);
//coming
起始索引是必需的,但宽度是可选的。 如果省略,它将提取字符串的其余部分。
const quote = "Winter is coming";
const part = quote.substr(6);
// is coming
substring(start, end) 方法返回开始索引和结束索引之间的字符串部分。 它以起始索引处的字符开始和结束,但不包括结束索引处的字符。
const quote = "We Stand Together";
const part = quote.substring(3, 8);
// Stand
如果省略结束索引,它将提取到字符串的末尾。
const quote = "We Stand Together";
const part = quote.substring(3);
// Stand Together
这与 indexOf 方法结合起来效果很好。 考虑以下代码来提取第一个冒号后的文本。
const quote = "You know nothing,Jon Snow";
const commaIndex = quote.indexOf(",");
const part = quote.substring(commaIndex + 1);
//"Jon Snow"
切片与子字符串具有相同的套接字,但基本上是为了模仿链表的套接字而添加的。
9. 模板字符串允许嵌入表达式
模板字符串文字可以创建跨多行并允许注册的字符串。
模板字符串是使用后冒号 (`) 字符定义的。
`Wisdom
and
Strength`
可以将有效表达式放置在模板字符串文字中,并对表达式进行求值并将其转换为字符串。
const word = "Awake";
`${word}! ${word}!`
//"Awake! Awake!"
10.使用UnicodeUTF-16表示字符串
使用一个或多个 UTF-16 代码单元存储字符。
length属性据说返回字符串中的字符数,但它实际上返回的是UTF-16单位的数量,并且只有每个字符适合16位时才返回字符数,否则返回一个很大的数字。
const word = 'Hi';
console.log(word.length)
//2
考虑下一个示例,该示例显示需要存储 2x16 位表情符号字符。
const word = 'Hi';
console.log(word.length)
//4
正如您所看到的,在这些情况下,宽度属性不能正确表示字符数。
charAt 方法返回一个新字符串,其中包含给定索引处的单个 UTF-16 代码单元,这清楚地表明我们只能读取该特定索引处的代码单元。
const word = 'Hi;
console.log(word.charAt(0))
//H
但是,charAt 无法正确返回表情符号字符,因为它使用 2 个代码单元。
const word = 'Hi';
console.log(word.charAt(2))
//�
为了获得正确的大小和索引访问,我们需要将字符串转换为字符链接列表。
请注意,当使用空字符串作为分隔符时, split 方法无法正确地将字符串转换为字符字段。
const word = 'Hi';
const chars = word.split("");
//["H", "i", "�", "�"]
11. Array.from 实用程序从类字段或可迭代对象创建新字段。
类字段对象具有索引访问和宽度属性,但没有链表方法,并且字符串是类字段对象。
Array.from 处理字符超过 16 位的情况,一旦我们有了字符的链接列表,我们就可以正确估计字符串中的字符数。
const word = 'Hi';
const chars = Array.from(word);
console.log(word.length);
//4
console.log(chars.length);
//3
当字符串正确转换为字符链接列表时,我们可以准确地访问给定索引处的字符,尽管它需要两个代码单元来表示它。
console.log(chars[2]);
//
-结尾-
近期新课程:
HTML5+CSS基础|JavaScript|Vue2.0+Vue3.0|陌陌小程序|陌陌公众号开发|Node.js|node.JS前端|React基础知识|React项目