我正在尝试理解这个表达式:
((ch = stream.getChar()) > ' ')
在这里,getChar()
获取一个字符。这个大于号比较运算符如何检查任何字符是否大于空格?
这可能吗?
我正在尝试理解这个表达式:
((ch = stream.getChar()) > ' ')
在这里,getChar()
获取一个字符。这个大于号比较运算符如何检查任何字符是否大于空格?
这可能吗?
一个空格也有一个字符代码。尽管它看起来不起眼,但它仍然有一个值。从流中取出的字符也是如此。比较这些值的字符代码就是产生输出的原因。
<
,但>
运算符只是翻转结果值)。2. a. Let py be the result of calling ToPrimitive(y, hint Number).
2. b. Let px be the result of calling ToPrimitive(x, hint Number).
x === stream.getChar()
和 y === ' '
。由于这两个操作数已经是原始字符串,因此结果为原始值 (px = x, py = y
),然后我们继续执行:4. Else, both px and py are Strings
'abc' > 'abcd' // false
'foo' > 'foobar' // false
如果getChar()
返回一个空格,那么这个空格就是其本身的前缀,这时候就显得非常重要了:
' ' > ' ' // false
x
和y
:
(例如,令k为最小的非负整数,满足px中第k个字符与py中第k个字符不同。(由于没有一个字符串是另一个字符串的前缀,因此必须存在这样的k。)
'efg'
和'efh'
,我们要找到g
和h
)Let m be the integer that is the code unit value for the character at position k within px.
Let n be the integer that is the code unit value for the character at position k within py.
最后,进行了比较:
If m < n, return true. Otherwise, return false.
这就是它与空间进行比较的方式。
简而言之,它将两个参数转换为它们的代码单元整数表示形式,并进行比较。
'abacus' <= 'calculator'
'abacus' < 'abate'
'#b' < '~a'
。字母顺序并不能涵盖它。 - jazzpi在大多数(如果不是全部)编程语言中,字符都是用数字来表示的。当您进行等于/大于/小于检查时,实际上检查的是底层数字。
因此,在JS中:
alert('c' > 'b'); // alerts true
alert('a' > 'b'); // alerts false
空格字符也有一个数字表示,因此检查是有效的。
[字符串] > [字符串]
将通过它们的代表值(参见ASCII表)来比较字符。
计算机将字符存储为一个数字(通常是一个或两个字节)。
每个字符都有一个独特的标识号码。
通过检查字符是否大于空格,实际上是在比较它们在表中的位置。
欲了解更多信息,请参见http://en.wikipedia.org/wiki/ASCII。
看看这个链接,它会解释JS中比较的工作原理:http://javascript.about.com/od/decisionmaking/a/des02.htm 基本上,你正在比较每个字符的ASCII值与空格的ASCII值,空格也是一个字符,因此具有相应的ASCII值。