鍍金池/ 問答/HTML/ 求解JavaScript一道類型轉(zhuǎn)換比較大小的題

求解JavaScript一道類型轉(zhuǎn)換比較大小的題

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

1.我個(gè)人的理解應(yīng)該是{}先toPrimitive(Number)調(diào)用valueOf()然后再調(diào)用toString()方法變成[object Object]。
2.所以就變成了'[object Object]y' > '[object Object]x'
3.之后我看了ecmascript規(guī)范中的11.8.3抽象關(guān)系比較算法 就不懂了為什么會是true。

  1. 否則,px 和 py 都是 Strings 類型

    (1).如果 py 是 px 的一個(gè)前綴,返回 false。(當(dāng)字符串 q 的值可以是字符串 p 和一個(gè)其他的字符串 r 拼接而成時(shí),字符串 p 就是 q 的前綴。注意:任何字符串都是自己的前綴,因?yàn)?r 可能是空字符串。)
    (2).如果px 是 py 的前綴,返回 true。
    (3).讓 k 成為最小的非負(fù)整數(shù),能使得在 px 字符串中位置 k 的字符與字符串py字符串中位置 k 的字符不相同。(這里必須有一個(gè) k,使得互相都不是對方的前綴)
    (4).讓 m 成為字符串 px 中位置 k 的字符的編碼單元值。
    (5).讓 n 成為字符串 py 中位置 k 的字符的編碼單元值。
    (6).如果 n<m,返回 true。否則,返回 false。

回答
編輯回答
哎呦喂

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

console.log('2' > '1') // true
console.log('2' > '12') // true
console.log('a2' > 'a1') // true
console.log('a2' > 'a12') // true
2017年8月11日 05:16
編輯回答
孤酒

我覺得你 1、2 理解是對的。
根據(jù) MDN> 會首先對前后的表達(dá)式調(diào)用 valueOf,也就是:

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

于是就是 '[object Object]y''[object Object]x' 按照字典序比較而已了,沒有第 3 點(diǎn)那么復(fù)雜的

2017年1月30日 20:50
編輯回答
尤禮

最后就是比較x和y,因?yàn)榍懊娴淖址枷嗤?/p>

'x'.charCodeAt()
'y'.charCodeAt()
2017年4月16日 00:28