当方法没有返回值时,为什么使用-1?

时间:2012-09-20 07:58:20

标签: javascript

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

if (string1.indexOf("@")==-1){
 alert("Please input a valid email address!")
 document.example.email.focus()

此。 if (string1.indexOf("@")==-1){为什么我们使用-1而不是0.

令我感到困惑,因为0几乎在所有地方都被用作'null'或'empty'值。

6 个答案:

答案 0 :(得分:4)

因为如果在@的最开始找到string1,即使找到它,其索引也会为0.

答案 1 :(得分:3)

大多数编程语言中,索引从零开始,意味着索引中的第一个位置(同样在大多数编程语言中,字符串是字符索引)将为0 - 因此0不能用于表示在任何地方都找不到任何东西。


帮助澄清:

stringchars的索引(字符或单符号类型)。因此,"hi@ho.com"是一个包含9个位置的索引:

[0] = 'h'
[1] = 'i'
[2] = '@'
[3] = 'h'
[4] = 'o'
[5] = '.'
[6] = 'c'
[7] = 'o'
[8] = 'm'

因为JavaScript中的索引从零开始,所以它们的第一个位置始终为0. indexOf使用-1来告诉您它找不到{{1}在任何地方,因为它不能使用0,因为0实际上是索引的第一个位置。

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

在上面的示例中,strings将返回2,而不是3.再次,因为索引从零开始。

答案 2 :(得分:2)

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

  • 如果string1@开头,则会返回0
  • 如果string1的第二个字符为@,则会返回1
  • 第3个字符将返回2
  • 第4个字符将返回3
  • 等等...
如果没有匹配则返回

-1,因为它不可能有-1从零开始的索引位置。

0无法使用,因为如果字符串以@

开头,则会与结果发生冲突

indexOf的更多信息可以在这里找到:

http://www.tizag.com/javascriptT/javascript-string-indexOf.php

答案 3 :(得分:0)

这是因为字符串中的字符从左到右编制索引,0是第一个字符。

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

答案 4 :(得分:0)

它是-1,因为这意味着它无法找到您正在寻找的字符串或字符集。由于字符串就像一个字符数组,就像在任何其他数组中一样,索引始终以0开头。

答案 5 :(得分:0)

以下示例可帮助您更好地理解:

var email = 'mymail@server.com';
//  indexes  0123456789...

正如您所看到的,m的索引为零,因为它位于字符串的开头,因此在此示例中,indexOf('@')将返回6,因为{{ 1}}位于字符串中的6 th 位置。

所以,如果找不到@,我们会回报什么?返回零表示找到了 的内容,因此我们希望返回一个非零值,根据@ indexOf

-1