Javascript 为什么在方法不返回值时使用-1?

Javascript 为什么在方法不返回值时使用-1?,javascript,Javascript,此语句仅检查文本框中的“@”符号 if (string1.indexOf("@")==-1){ alert("Please input a valid email address!") document.example.email.focus() 这个如果(string1.indexOf(“@”)==-1{为什么我们使用-1而不是0 这让我感到困惑,因为0几乎在任何地方都被用作“null”或“empty”值。因为如果@是在string1的最开始处找到的,那么即使找到了它,它的索引也将是0。

此语句仅检查文本框中的“@”符号

if (string1.indexOf("@")==-1){
 alert("Please input a valid email address!")
 document.example.email.focus()
这个<代码>如果(string1.indexOf(“@”)==-1{为什么我们使用-1而不是0


这让我感到困惑,因为0几乎在任何地方都被用作“null”或“empty”值。

因为如果
@
是在
string1
的最开始处找到的,那么即使找到了它,它的索引也将是0。

在大多数编程语言中,索引是零基的,这意味着索引中的第一个位置(同样,在大多数编程语言中,字符串是字符的索引)将是0-因此0不能用来表示在任何地方都找不到任何内容


为了帮助澄清:

字符串
字符
(字符或单个符号类型)的索引hi@ho.com“是一个包含9个位置的索引:

[0] = 'h'
[1] = 'i'
[2] = '@'
[3] = 'h'
[4] = 'o'
[5] = '.'
[6] = 'c'
[7] = 'o'
[8] = 'm'
因为JavaScript中的索引是基于零的,所以它们总是从第一个位置0开始。
indexOf
使用-1告诉您它在任何地方都找不到
@
,因为它不能使用0,因为0实际上是索引的第一个位置

即使
字符串
不是索引,出于传统和事实标准的原因,大多数语言仍然使用-1表示找不到字符,0表示第一个位置


在上面的示例中,
indexOf(“@”)
将返回2,而不是3。这也是因为索引是从零开始的。

这是因为字符串中的字符是从左向右索引的,0是第一个字符


因此,如果您找到了一个字符/字符串,那么您期望的结果范围从0到字符串长度-1,并且保持返回类型相同似乎是合乎逻辑的。

它是-1,因为这意味着它找不到您要查找的字符串或字符集。因为字符串与任何其他数组中的字符类似,所以index总是以0开头。

indexOf
返回传递字符串的第一个从零开始的索引位置

  • 如果
    string1
    @
    开头,则它将返回
    0
  • 如果
    string1
    的第二个字符是
    @
    ,它将返回
    1
  • 第三个字符将返回
    2
  • 第四个字符将返回
    3
  • 等等等等
如果不存在匹配项,则返回
-1
,因为不可能有
-1
基于零的索引位置

不能使用
0
,因为如果字符串以
@


有关
indexOf
的更多信息,请参见:


以下是一个帮助您更好理解的示例:

var email = 'mymail@server.com';
//  indexes  0123456789...
正如您所看到的,
m
的索引是零,因为它位于字符串的开头,所以在本例中,
indexOf('@')
将返回
6
,因为
@
位于字符串的第6位

因此,如果未找到
@
,我们将返回什么?返回零表示找到了某个对象,因此我们希望返回一个非零值,根据
索引,它是
-1

var invalidEmail = 'myEmail';
// indexes      -1 |0123456     

这个问题就像一个缓慢的搜索引擎结果:)