为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2019-03-14 22:15:53
({} + 'y' > {} + 'x');1.我个人的理解应该是{}先toPrimitive(Number)调用valueOf()然后再调用toString()方法变成[object Object]。2.所以就变成了'[object Object]y' > '[object Object]x'3.之后我看了ecmascript规范中的11.8.3抽象关系比较算法 就不懂了为什么会是true。否则,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。
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

3) 字符串比较大小,是按字典序来比较大小的,第一位相同就比较第二位:


console.log('2' > '1') // true

console.log('2' > '12') // true

console.log('a2' > 'a1') // true

console.log('a2' > 'a12') // true


查看完整回答
反对 回复 2019-03-23
?
不负相思意

TA贡献1777条经验 获得超10个赞

我觉得你 1、2 理解是对的。
根据 MDN> 会首先对前后的表达式调用 valueOf,也就是:

(({} + 'y').valueOf() > ({} + 'x').valueOf())

于是就是 '[object Object]y' 和 '[object Object]x' 按照字典序比较而已了,没有第 3 点那么复杂的


查看完整回答
反对 回复 2019-03-23
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

最后就是比较x和y,因为前面的字符都相同

'x'.charCodeAt()
'y'.charCodeAt()


查看完整回答
反对 回复 2019-03-23
  • 3 回答
  • 0 关注
  • 441 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信