在Array.prototype.findIndex中使用?:运算符时出现问题

时间:2017-08-23 17:14:58

标签: javascript jquery

示例:



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>
&#13;
&#13;
&#13;

输出:

  

0

     

1

第一种情况:

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

如果它将ximg.length进行了比较。我不明白为什么它会返回0

img.prop('id')返回undefineddiv.prop('id')返回2,为什么会记录0

第二种情况:

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

在与x比较之前,它获得了div标签的ID。没关系。

请指正。谢谢!

1 个答案:

答案 0 :(得分: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等待真值,div.prop('id')2,这是真实的。它在第一个索引上返回它,这就是它返回0的原因。