zoukankan      html  css  js  c++  java
  • 关于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,很常见吧
    

  • 相关阅读:
    【编程题目】左旋转字符串 ☆
    360測试开发笔试题(2016内推)
    start_kernel——boot_cpu_init及PER_CPU
    UVa 10673
    【面试】-Java基础知识
    Navgationcontroller 的pop
    别拿接口不当开发
    C++基础学习教程(三)
    安卓版微信自带浏览器和IE6浏览器ajax请求abort错误处理
    【动态树问题】LCT学习笔记
  • 原文地址:https://www.cnblogs.com/nahaohao/p/14785727.html
Copyright © 2011-2022 走看看