我试图理解这个表达:
((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 处的字符不同。(必须有这样的 ak,因为两个 String 都不是另一个的前缀。)
(例如,'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.
这就是它与空间的比较。
tl;dr 它将两个参数转换为它们的代码单元整数表示,并进行比较。
在 Javascript 中,字符串按字母顺序进行比较。这些表达式是正确的:
'abacus' <= 'calculator'
'abacus' < 'abate'
在大多数(如果不是全部)编程语言中,字符在内部由数字表示。当您进行相等/大于/小于检查时,您实际检查的是基础数字。
因此在 JS 中:
alert('c' > 'b'); // alerts true
alert('a' > 'b'); // alerts false
空格字符也有数字表示,因此检查是有效的。
[string] > [string]
将通过其代表值比较字符(参见ASCII 表)
字符作为数字(通常是一个或两个字节)存储在计算机的内存中。
每个字符都有一个唯一的标识号。
通过检查字符是否大于空格,您实际上可以比较它们在表格中的位置。
有关更多信息,请参见http://en.wikipedia.org/wiki/ASCII。
查看此链接,它将解释比较如何在 JS 上进行:http: //javascript.about.com/od/decisionmaking/a/des02.htm 基本上,您将每个字符的 ASCII 值与 ASCII 进行比较空格的值,也是一个字符,因此具有相应的 ASCII 值。