求解JavaScript一道类型转换比较大小的题

({} + 'y' > {} + 'x');

1.我个人的理解应该是{}先toPrimitive(Number)调用valueOf()然后再调用toString()方法变成[object Object]。
2.所以就变成了'[object Object]y' > '[object Object]x'
3.之后我看了ecmascript规范中的11.8.3抽象关系比较算法 就不懂了为什么会是true。

  1. 否则,px 和 py 都是 Strings 类型

    (1).如果 py 是 px 的一个前缀,返回 false。(当字符串 q 的值可以是字符串 p 和一个其他的字符串 r 拼接而成时,字符串 p 就是 q 的前缀。注意:任何字符串都是自己的前缀,因为 r 可能是空字符串。) 
    (2).如果px 是 py 的前缀,返回 true。 
    (3).让 k 成为最小的非负整数,能使得在 px 字符串中位置 k 的字符与字符串py字符串中位置 k 的字符不相同。(这里必须有一个 k,使得互相都不是对方的前缀) 
    (4).让 m 成为字符串 px 中位置 k 的字符的编码单元值。 
    (5).让 n 成为字符串 py 中位置 k 的字符的编码单元值。 
    (6).如果 n<m,返回 true。否则,返回 false。


收到一只叮咚
浏览 442回答 3
3回答

偶然的你

3) 字符串比较大小,是按字典序来比较大小的,第一位相同就比较第二位:console.log('2' > '1') // trueconsole.log('2' > '12') // trueconsole.log('a2' > 'a1') // trueconsole.log('a2' > 'a12') // true

不负相思意

我觉得你 1、2 理解是对的。根据 MDN,>&nbsp;会首先对前后的表达式调用&nbsp;valueOf,也就是:(({}&nbsp;+&nbsp;'y').valueOf()&nbsp;>&nbsp;({}&nbsp;+&nbsp;'x').valueOf())于是就是&nbsp;'[object Object]y'&nbsp;和&nbsp;'[object Object]x'&nbsp;按照字典序比较而已了,没有第 3 点那么复杂的

慕桂英3389331

最后就是比较x和y,因为前面的字符都相同'x'.charCodeAt() 'y'.charCodeAt()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript