2017-08-23 1 views
0
内部オペレータ

例:問題:Array.prototype.findIndex

var img = $('img'); 
 
var div = $('div'); 
 

 
var arr = ['1', '2', '3']; 
 

 
console.log(arr.findIndex(x => x === img.length ? img.prop('id') : div.prop('id'))); 
 

 
console.log(arr.findIndex(x => x === (img.length ? img.prop('id') : div.prop('id'))));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
 

 
<div id="2"></div>

出力:

最初のケース:

x === img.length ? img.prop('id') : div.prop('id') 

img.lengthxを比較した場合。私はなぜそれが0を返すのか分からないのですか?

img.prop('id')戻りundefined2div.prop('id')戻って、なぜそれが0を記録したのですか?

秒ケース:

x === (img.length ? img.prop('id') : div.prop('id')) 

それはxに比較する前にdivタグのIDを得ました。大丈夫。

私を修正してください。ありがとうございました!

+1

最初のケースは 'arr.findIndex(x => 2)'と評価され、最初の繰り返しでは常に* true *と評価されます(index * * 0 **)。 – Santi

答えて

2

xは常にコード内の文字列になります。また、img.lengthは数字になるため、厳密には等しくはありません(===)。

だからそれは次のように評価します:

(x === img.length) ? img.prop('id') : div.prop('id') 
(false   ) ? img.prop('id') : div.prop('id') 
             div.prop('id') 
             2 

findIndex truthy値を待ち、そしてdiv.prop('id')はtruthyある、2あります。

+0

ありがとう!私は再びdivのidを '0'に変更してテストしました。結果に' -1'を記録します。何かが好きです:条件が 'true'の場合、配列の最初の項目は一致します(' 2' === '1'を比較し続ける必要はありません)。そうでなければ-1を返します。右? – Vayne

+0

配列の反復が真を返すものであれば、その結果が返されます。 – Scimonster