关于js的比较

原来博客园也支持markdown,呜呜呜,才知道。
r1 js字符串和数字的比较 (简书)

比较分为很多种,大致常见的参赛选手有三类:数字、数字字符串和字符串

数字 数字字符串 字符串
数字 常规比较 1.转换比较 2.按位转换比较
数字字符串 —— 3.按位转换比较 4.按位转换比较
字符串 —— —— 5.按位转换比较

首先,先总结一句话:有数字参与比较会将对手转化为数字再比较;字符串之间的比较都是按位(逐位)比较,并通过ASCII码比较,可以把数字字符串归为字符串一类。

其次,应用

  • 比较两个时间的大小

    ('2018-12-12'<'2018-12-13') //=> true,很常见吧
    // 再也不用转为时间戳比较了,呜呜呜
    

再看下面例子,加深理解:

// 1.数字vs数字字符串
(5<'10') //=> true,发现会将'10'转化为10进行比较

// 2.数字vs字符串
(5<'a') //=> false,永远为false,因为与数字进行比较,
		// 她首先会进行转换成数字,而'a'转为数字是NaN
		// 与NaN比较无意义,自然永远为false
// 小结:从1、2两个例子可以看出,只要跟数字比较,
// 她都会尝试将待比目标转化为数字

// 3.数字字符串vs数字字符串
('5'<'10') //=> false,会发现她是按位比较,并且比较的是ASCII
'5'.charCodeAt(0) //=> 53
'1'.charCodeAt(0) //=> 49
				// 0-9的ASCII码为48-57

// 4.数字字符串vs字符串
('111111111111'<'a') //=> false,无论前面是多少个1,结果都为false
					// 因为比较时,按位比较,且数字1的ASCII小于a
					// 扩展:所有数字都小于字母的ASCII

// 5.字符串vs字符串
('a'<'b') //=> true,这个和第3、4点结论一致,都是按位并转化为ASCII比较
// 小结:通过3、4、5三个例子发现,只要是字符串之间的比较都是
// 按位+ASCII码比较

// 6.最后看一下逐位比较
('abc'<'abcd') //=> true,人家多一个d,当然比不过
('abcc'<'abcd') //=> true,人家d>c(ASCII码),当然比不过
('2018-12-12'<'2018-12-13') //=> true,很常见吧

原文地址:https://www.cnblogs.com/nahaohao/p/14785727.html