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。
负零等于正零。
负无穷小于包括其自身在内的任何数。
正无穷大于包括其自身在内的任何数。
但是这里并没有将 两个文本框的值转换成 数字做比较?
有知道的,请解释下,谢谢!
按一般思维这个结果是false。不过结果并非如此,返回的是true。
补充回复:
这里执行的是字符串比较。因为DOM元素的属性都是字符串类型的,所以这里他只会做字符串比较。要做数字的大小对比必须使用parseInt进行转换成整型数然后做对比。
所以这里的重点是javascript字符串比较的问题了。
javascript在进行字符串比较的时候执行的是按位进行比较的,所以这里按位进行比较时就是字符4和字符1进行对比,这个对比就很明确了,ASCII码值4是比1大的(这里还待商榷,我还需要证实下)。
另外为了说明这里执行的是字符串比较,我把代码稍稍加了句话,你可以看下
alert(typeof (document.getElementById("txtOne").value));
alert(typeof (document.getElementById("txtTwo").value));
补充二:
比较运算符
用于比较表达式。
result = expression1 comparisonoperator expression2
下表包含一个比较运算符的列表,以及确定 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对象的属性时取出的是字符串类型值。
不好意思,我这里扣字眼了!