2016-01-08 51 views
-4
var JOURNAL = [ 
     {"events":["carrot","exercise","weekend"],"squirrel":false}, 
     {"events":["bread","pudding","brushed teeth","weekend","touched tree"],"squirrel":false}] 

     function hasEvent(event, entry) { 
      var x = entry.events.indexOf(event) 

      console.log(x) 
      //-1  

     return x != -1; 
    } 
     hasEvent('pizza', JOURNAL[0]) 

例如:JOURNAL [0]中没有'pizza',因此它返回-1,导致x返回false。“为什么indexOf在找不到元素时返回-1”

我明白,如果它没有找到事件,它会返回-1!

我的问题是为什么它返回-1?它背后有什么理由吗?

很多谢谢

编辑:问这样的问题不好吗?这就是为什么我被低估了?抱歉!

+3

如果x!= -1则返回true,否则返回false。 –

+0

检查文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf我猜这是为什么没有细节原因。但是,当找不到东西时返回-1是相当常见的 – Patchee

+2

因为规格说明如此 - http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.14 – Abhitalks

回答

2

-1被使用,因为它是第一个,也是最令人难忘的数字,不能被误认为是数组中的实际索引。

任何数字零或更大都可能是一个索引,并且没有理由通过拥有一些随机的“幻数”来使事情复杂化。

0
return x != -1; 

这将返回条件语句的结果,
要么truefalse万一x不等于-1

0

那是怎样阵列indexOf在你的榜样工程

var array = [2, 9, 9]; 
array.indexOf(2);  // 0 
array.indexOf(7);  // -1 

var events = ["carrot","exercise","weekend"]; 
events .indexOf("carrot");  // 0 
events .indexOf("csarrot");  // -1 

你的方法hasEvent()返回xindexOf值超过events

function hasEvent(event, entry) 
{ 
     var x = entry.events.indexOf(event); 
     return x != -1; // if the event was found in entry.events array then it will return the index of the item otherwise -1 
} 
0

indexOf回报-1如果event没有找到一个数组。所以,x!=-1表示event被发现。

+0

是的,我明白,但我只是想知道为什么-1? – Sotra

+0

@Sotra你会宁愿它返回什么数字? – TZHX

+0

只是好奇,如果有任何理由,为什么它返回-1 ..但由于没有人回答这一部分,那么我想这背后没有理由。 – Sotra

0

Mozilla Developer

的的indexOf()方法返回在该给定元素可以在阵列中可以发现,或-1,如果它不存在的第一个索引。

考虑到这一点,检查x != -1意味着存在的event是否在entry.events阵列发现的检查,换句话说,“返回对象是否在阵列或未找到”。

0

使用indexOf进行数组搜索时,返回元素的索引。在数组中,索引从0开始。所以第一个元素将有索引0依次类推......

但是,如果找不到该元素,则返回-1

所以当你说x != -1,这意味着搜索元素存在于数组中。

作为每Array - MDN

JavaScript数组被零索引:阵列的第一个元素的索引为0,而最后一个元素是索引处等于阵列的长度属性减去1的值。

有关indexOf的更多信息,请检查MDN

0

我的问题是为什么它返回-1?

因为这是如何在功能array.indexOf指定:

的的indexOf()方法返回在该给定元素可以在阵列中可以发现,或-1,如果它不存在的第一个索引。来源:Array.prototype.indexOf

背后有什么理由吗?

有一个合乎逻辑的原因:JavaScript中的数组是0索引的。因此,范围(0,...,array.length_1)中的所有值都是有效的索引值,即当元素在数组中时可能返回。返回array.length意味着找不到会比较尴尬,因为它会强制调用者总是检查array.length来解释该值。

因此,-1总是显而易见的值来表示找不到,因为它永远不是有效的索引值。

x!= -1是什么意思?

这意味着功能hasEvent将返回true如果参数event被发现,false如果不是。