当它显然不是时,JavaScript indexOf大于-1 false?

时间:2014-05-27 12:45:22

标签: javascript

id为' post_url'的字段的值是 http://www.example.com/ 。对于大于-1的任何内容,不应该为JavaScript返回true吗?

alert('1a = '+id_('post_url').value.indexOf('http:'));//      0
alert('1b = '+id_('post_url').value.indexOf('http:') > -1);// false
alert('2a = '+id_('post_url').value.indexOf('www.'));//       7
alert('2b = '+id_('post_url').value.indexOf('www.') > -1);//  false

4 个答案:

答案 0 :(得分:18)

您正在比较字符串和数字。在进行indexOf比较之前,您已将-1(我假设为>)的结果连接到一个字符串。这相当于NaN > -1

"1b-1" > -1 // => false

答案 1 :(得分:4)

检查Operator Precedence 添加/字符串连接优先于关系比较。

您的代码需要一些括号/分组操作符来解决这个问题:

alert( '1b = ' + ( id_('post_url').value.indexOf('http:')>-1 ) ); // 1b = true

答案 2 :(得分:3)

您正在尝试将字符串连接计算为数字,该数字返回false。

'2b'+id_('post_url').value.indexOf('www.')>-1

...使用操作顺序,将字符串2B添加到id_('post_url').value.indexOf('www.')

返回的索引中

因此,将整个事物作为字符串进行转换,并评估字符串是否大于-1。

以下是您需要编写警报的方法。

alert(id_('post_url').value.indexOf('www.')>-1);

那应该提醒'真实'。

答案 3 :(得分:1)

'2b'+id_('post_url').value.indexOf('www.')

您正在为索引添加2b,因此它不会保持整数,但会将值作为字符串2b +您拥有的任何索引。这就是你观察的原因。