一个js运算符问题

js code:

<input type="text" id="txtOne" value="4" />
<input type="text" id="txtTwo" value="13" />
<input type="button" id="btnOperation" value="Compare" onclick="compare();" />

function compare()
{
 alert(document.getElementById("txtOne").value > document.getElementById("txtTwo").value);
}

这段代码返回结果是什么?

如果比较时 按照 数字类型比较 结果是 false;

如果比较时 按照 字符串类型比较 结果是 true;

但经过测试,是按照字符串比较的 结果是 ture。

通用看js手册关于“关系运算符(<、>、<=、>=)”描述如下

  • 尝试将 expression1 和 expression2 都转换为数字。

  • 如果两个表达式均为字符串,则按字典序比较字符串。

  • 如果任一表达式为 NaN,则返回 false

  • 负零等于正零。

  • 负无穷小于包括其自身在内的任何数。

  • 正无穷大于包括其自身在内的任何数。

 

但是这里并没有将 两个文本框的值转换成 数字做比较?

有知道的,请解释下,谢谢!

 

肥皂起泡泡
浏览 490回答 1
1回答

智慧大石

按一般思维这个结果是false。不过结果并非如此,返回的是true。 补充回复:  这里执行的是字符串比较。因为DOM元素的属性都是字符串类型的,所以这里他只会做字符串比较。要做数字的大小对比必须使用parseInt进行转换成整型数然后做对比。 所以这里的重点是javascript字符串比较的问题了。 javascript在进行字符串比较的时候执行的是按位进行比较的,所以这里按位进行比较时就是字符4和字符1进行对比,这个对比就很明确了,ASCII码值4是比1大的(这里还待商榷,我还需要证实下)。 另外为了说明这里执行的是字符串比较,我把代码稍稍加了句话,你可以看下 alert(typeof (document.getElementById("txtOne").value));alert(typeof (document.getElementById("txtTwo").value));   补充二: 比较运算符 Footer Start 要求 NONSCROLLING BANNER END 用于比较表达式。 result = expression1 comparisonoperator expression2 参数 result 任意数值。 expression 任何表达式。 comparisonoperator 任何比较运算符。 object 任何对象名称。 说明 下表包含一个比较运算符的列表,以及确定 result 为 True, False, 或 Null 的条件。 运算符描述True 如果false 如果Null 如果 < 小于 expression1 < expression2 expression1 >= expression2 expression1 or expression2 = Null <= 小于或等于 expression1 <= expression2 expression1 > expression2 expression1 or expression2 = Null > 大于 expression1 > expression2 expression1 <= expression2 expression1 or expression2 = Null >= 大于或等于 expression1 >= expression2 expression1 < expression2 expression1 or expression2 = Null = 等于 expression1 = expression2 expression1 <> expression2 expression1 or expression2 = Null <> 不等于 expression1 <> expression2 expression1 = expression2 expression1 or expression2 = Null 当比较两个表达式时,您或许不容易确定比较的表达式是作为数值或作为字符串。 下表描述了如何对表达式进行比较、以及比较的结果,它取决于比较的子类型。 如果则 两个表达式都是数值 执行数值比较。 两个表达式都是字符串 执行字符串比较。 一个表达式是数值,加一个表达式是字符串 数值表达式小于字符串表达式。 一个表达式为 Empty 而另一个为数值 执行数值比较,0 作为 Empty 表达式的值。 一个表达式为Empty 而另一个表达式为字符串 执行字符串比较,零长度的字符串 ("") 作为 Empty 表达式的值。 两个表达式都为 Empty 则两个表达式相等。   你看下上面的说法!这里很明确,两个表达式都是字符串,执行字符串比较。 而我们在操作DOM对象的属性时取出的是字符串类型值。所以这里他进行的是字符串比较。   补充回复二: 为保证我在说明事实之前请先打开http://www.w3school.com.cn/js/pro_js_operators_relational.asp 这个链接,然后浏览一遍相关描述。 另外你也可以下载一个ECMAScript 262的手册找到关系运算符一章,看看官方的描述。 看看你给的链接的文章http://jiake.javaeye.com/blog/231186说的是否正确,我不敢说他翻译或者转抄的是完全正确的,但至少他这里的说法不够准确的。 针对JScript8中微软官方文档中描述这个是没错的,但我想这个是理解的问题。且看 尝试将 expression1 和 expression2 都转换为数字。 如果两个表达式均为字符串,则按字典序比较字符串。                                                           针对这里的描述我想是会产生理解的偏差的,但是这里我觉得写的还是很明确的,尝试将exp1和exp2转换为数字,如果exp1和exp2均为字符串,则按字典顺序比较字符串。备注:操作DOM对象的属性时取出的是字符串类型值。 不好意思,我这里扣字眼了!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript