我正在学习Javascript,并且不明白为什么indexOf会返回-1:
var string = "The quick brown fox jumps over the lazy dog";
console.log (string.indexOf("good"));
答案 0 :(得分:27)
-1表示“找不到匹配项”。
它返回-1而不是“false”的原因是字符串开头的一个针位于位置0,这相当于Javascript中的false。因此,返回-1可确保您知道实际上没有匹配。
答案 1 :(得分:8)
-1表示未找到匹配项。 “好”不在那句话中。这是documented behaviour。
indexOf()
方法返回可在数组中找到给定元素的第一个索引,如果不存在,则返回-1
。
答案 2 :(得分:8)
因为数组是基于0的,所以返回0意味着从匹配的第一个字符开始; 1,第二个字符,依此类推。这意味着任何0和更高的内容都是真实的或“找到的”响应。要将所有内容保留在整数类别中,-1表示未找到匹配项。
答案 3 :(得分:2)
当找不到匹配项时,indexOf还有另一个原因返回-1。请考虑以下代码:
<div>
<asp:GridView
ID="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="Id"
DataSourceID="SqlDataSourceH"
CssClass="myGridView"
RowStyle-CssClass="rows"
ShowHeader="false">
<Columns>
<asp:ImageField
DataImageUrlField = "Id"
DataImageUrlFormatString = "Hardware.aspx?Id={0}"
ControlStyle-Width = "100"
ControlStyle-Height = "100"></asp:ImageField>
<asp:BoundField DataField="descr"></asp:BoundField>
</Columns>
</asp:GridView>
<asp:SqlDataSource
runat="server"
ID="SqlDataSourceH"
ConnectionString='<%$ ConnectionStrings:ConnectionString %>'
SelectCommand="SELECT [Id], [img], [descr] FROM [Hardware]">
</asp:SqlDataSource>
</div>
因为〜( - 1)= 0所以indexOf返回-1的事实使得更容易编写if ... else使用〜。
答案 4 :(得分:0)
搜索从未找到它正在寻找的内容(“好”不在句子中),-1是默认的返回值。
答案 5 :(得分:0)
相关问题;即使主题词(从语义上来说)或部分匹配的任何字母序列中存在主题词,indexOf()也会返回其第一个匹配字母的索引。例如
const string = "The quick brown fox jumps over the lazy dog";
console.log(string.length);
// expected output: 43
console.log (string.indexOf("fox"));
// expected output: 16
console.log (string.indexOf(" q"));
// expected output: 3
但是,如果部分字母序列与字符串数组的任何部分都不匹配,则该方法将返回-1,与“ good”相同;
console.log (string.indexOf("foxy"));
// expected output: -1
console.log (string.indexOf("good"));
// expected output: -1
以防万一,可以使用split()方法将其转换为子字符串数组(此处为单词),并用空格(标点符号)将长字符串分开;
const words = string.split(' ');
console.log(words);
// expected output: ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
console.log(words.indexOf("fox"));
// expected output: 3