更聪明的学习方式 JavaScript:第 23 章 - 字符串:查找段

A Smarter Way to Learning JavaScript: Chapter 23 - Strings: Finding Segments

我正在学习更智能的学习方式 JavaScript 的章节和练习,第 23 章介绍了字符串:使用 indexOf 和 lastIndexOf 方法查找段。

在示例中,第二个变量 firstChar 被赋予包含字符串 "World War II" 的变量文本的值。 objective 是用新字符串 "the Second World War" 替换字符串 "World War II"。下面的代码完成了任务,但是我不明白第 3 行是如何工作的。我知道 indexOf 将 return 在这种情况下首次出现的段的值 0,但我不知道它是如何删除 "World War II" 的。我的问题是 3 号线如何运作?

0 var text = "World War II";
1 var firstChar = text.indexOf("World War II");
2 if (firstChar !== -1) {
3 text = text.slice(0, firstChar) + "the Second World War" + text.slice(firstChar + 12);
4 { 

第 3 行说:取从索引 0 开始的字符串到索引 firstChar,追加 "the Second World War" 然后最后追加从索引 (firstChar + 12) 开始的字符串到原始字符的末尾字符串.

分解:

// This returns an empty string since firstChar = 0 here
text.slice(0, firstChar)

// This also returns an empty string since firstChar + 12 is equal to
// the length of "World War II"
text.slice(firstChar + 12)

看看String.slice

text.slice(0, firstChar) 是从文本开头到 "World War II" 开始位置的字符串部分。它将 "the Second World War" 附加到字符串的该部分,然后附加原始文本变量的其余部分,但跳过 "World War II"

的 12 个字符

这意味着如果 var text = "This is not World War II and that is good!"

第 3 行本质上是 "This is not " + "the Second World War" + “很好!”;

slice(start, end) 用于从指定的起始索引到结束索引取一个子串。

所以,text.slice(0, firstChar)会return一个从start=0到end=0的子串,因为firstChar的值为0。(这个return是空串)

现在,字符串 "Second World War" 将被添加到 null 中,使 text = the Second World War

的值

slice(start) 带有单个参数 return 从 "start" 开始直到字符串末尾的字符串。

对于这个例子,即使不写text.slice(firstChar + 12),我们也会得到相同的结果,因为firstChar + 12 = 0 + 12 = 12,但是原始字符串的总长度"World War II"是12,因此我们将得到一个空字符串。

但是假设 "text" 的初始值本来是 text = "World War II was deadly" 即,如果我们要替换的字符串后面有一些文本,即。 "World War II" 然后行 text.slice(firstChar + 12) 追加字符串的剩余部分,在本例中为 "was deadly",文本的值变为,

text = second World War was deadly
if (firstChar !== -1)

好的,这是你的第二行代码,它在 javascript indexOf() 方法中意味着什么 returns -1 如果你输入的值没有出现,那么,

在 indexof() 中,语法是

str.indexof(searchvalue, start);

text = text.slice(0, firstChar) + "the Second World War" + text.slice(firstChar + 12);

所以这一行告诉

text= "World War II";
text.slice(0,firstChar)

//它的意思是从 0 到 firstChar 切片,我们在 firstChar 中有这个字符串 "World War II".

所以这个结果是空的,因为切片方法没有找到 firstChar,这就是为什么它给出空的原因。

空后会有文字"the Second World War".

text.slice(firstChar + 12);

这意味着切片的起点不匹配,当起点不匹配时,方法给出空。

所以结果是新的文本变量字符串是这个

"the Second World War".