8

我试图理解这个表达:

((ch = stream.getChar()) > ' ')

在这里,getChar()得到一个字符。这个大于比较运算符如何检查任何字符是否大于空格?

这可能吗?

4

7 回答 7

13

空白处有字符代码。尽管看起来不多,但它仍然具有价值。从流中提取的字符也是如此。比较这些值的字符代码是产生输出的原因。

于 2013-03-08T11:59:19.957 回答
9

让我们看一下语言规范(算法本身在此处描述)(请注意它定义了<,但>运算符只是翻转结果值)。

运算符所做的是尝试将两个操作数转换为原始类型,并优先考虑数字:

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',我们想要gh

然后将我们找到的字符转换为它们的整数值:

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 它将两个参数转换为它们的代码单元整数表示,并进行比较。

于 2013-03-08T12:16:03.407 回答
3

在 Javascript 中,字符串按字母顺序进行比较。这些表达式是正确的:

 'abacus' <= 'calculator'
 'abacus' < 'abate'
于 2013-03-08T12:00:10.130 回答
2

在大多数(如果不是全部)编程语言中,字符在内部由数字表示。当您进行相等/大于/小于检查时,您实际检查的是基础数字。

因此在 JS 中:

alert('c' > 'b'); // alerts true
alert('a' > 'b'); // alerts false

空格字符也有数字表示,因此检查是有效的。

于 2013-03-08T12:00:43.873 回答
1

[string] > [string]将通过其代表值比较字符(参见ASCII 表

于 2013-03-08T11:59:00.207 回答
0

字符作为数字(通常是一个或两个字节)存储在计算机的内存中。

每个字符都有一个唯一的标识号。

通过检查字符是否大于空格,您实际上可以比较它们在表格中的位置。

有关更多信息,请参见http://en.wikipedia.org/wiki/ASCII

于 2013-03-08T12:00:02.813 回答
0

查看此链接,它将解释比较如何在 JS 上进行:http: //javascript.about.com/od/decisionmaking/a/des02.htm 基本上,您将每个字符的 ASCII 值与 ASCII 进行比较空格的值,也是一个字符,因此具有相应的 ASCII 值。

于 2013-03-08T12:00:25.423 回答