js非数值的比较

/**
 * 非数值的比较:
 * 1.对于非数值的比较时,会将其转换成数字然后再比较
 * 2.如果符号两端是字符串的值进行比较时,不会将其转换为数字进行比较,而是
 * 分别比较字符串中的字符的 unicode 编码,如果其中两个字符的编码相等则直接跳过,
 * 继续比较下一个字符,若不等,直接输出结果,不会再比较后面的字符
 * 3.如果比较的是两个字符串型的数字,一定要将它们都转成数字类型再进行比较
 */
// number
console.log(`2 > 1 = ${2 > 1}`); // 2 > 1 = true

// NaN - 任何值与 NaN 比较都是 false
console.log(`1 > NaN = ${1 > NaN}`); // 1 > NaN = false

// boolean
console.log(`1 > false = ${1 > false}`); // 1 > false = true
console.log(`true > false = ${true > false}`); // true > false = true

// null
console.log(`1 > null = ${1 > null}`); // 1 > null = true

// undefined
console.log(`1 > undefined = ${1 > undefined}`); // 1 > undefined = false

// string
console.log(`1 > '0' = ${1 > '0'}`); // 1 > '0' = true
// 'hello' 转换成数字为 NaN, 任何值与 NaN 比较都是 false
console.log(`2 > 'hello' = ${2 > 'hello'}`); // 2 > 'hello' = false
console.log(`2 > '1h3ello' = ${2 > '1h3ello'}`); // 2 > '1h3ello' = false
console.log(`Number('1h3ello') = ${Number('1h3ello')}`); // Number('1h3ello') = NaN

// 两个字符型数字的比较
// '1' 的 unicode 编码是 0x31,'5' 的 unicode 编码是 0x35,显然
// 前者小,后者大
console.log(`'1' > '5' = ${'1' > '5'}`); // '1' > '5' = false

// 先将字符串 '11' 中的字符 '1' 的 unicode 编码与 '5' 的 unicode 编码进行比较,发现前者小于后者,
// 直接输出结果 false,字符串 '11' 中另外的字符 '1' 不会再进行比较
console.log(`'11' > '5' = ${'11' > '5'}`); // '11' > '5' = false

// 将 '11' 与 '5' 都转换成 number 再进行比较
console.log(`+'11' > +'5' = ${+'11' > +'5'}`); // +'11' > +'5' = true

// 实际比较的是:'c' > 'd'
console.log(`'abcde' > 'abdef' = ${'abcde' > 'abdef'}` ); // 'abcde' > 'abdef' = false
posted @ 2019-10-28 18:52  勾践  阅读(285)  评论(0编辑  收藏  举报