字符串(String)比较大小规则(2)】

本文详细解析了JavaScript中字符串比较的规则,包括数字与数字、字符串与字符串、字符串与数字之间的比较,以及相等与全等的判断。特别讨论了字符串中数字的比较逻辑和空与空格的区别,强调了类型转换在比较过程中的作用,以及NaN在比较中的特殊性。
摘要由CSDN通过智能技术生成

前端学习笔记——JavaScript篇


在这里插入图片描述


**

字符串(String)比较大小规则(2)】

本篇承接上篇(1),将罗列JS中遇到的比较大小的所以可能性以及其结果~
**

1. 先插播点铺垫——比较运算符你了解多少?
比较运算符:
➢ > : 左边是否大于右边;
➢ <: 左边是否小于右边;
➢ >=: 左边是否大于或等于右边;
➢ <=: 左边是否小于或等于右边;
➢ ==: 左右两边是否相等;
➢ ===: 左右两边是否类型和值都相等;
➢ !==: 左右两边是否不全等;
➢ 比较结果为boolean(布尔)类型,即只会得到true或false;


2.结合实际代码分下面几种情况(不足望指点)

(1)最简单的数字类型与数字类型之间比较;

 console.log(5 > 1)     // 结果为ture
 console.log(2 > 8)     //结果为true

这个没有什么好说的,谁大谁小一眼而定


(2)字符串类型与字符串类型之间比较

console.log('abc' < 'abcd')    //结果为true
console.log('abc' > 'ad')		//结果为false
console.log('abc' < 'abc123')	//结果为true
console.log('e' > 'abcdefg')    //结果为true
console.log('2'>'11')       //结果为true
console.log('50'>'6')      //结果为false

相同都是字符串类型情况下比较的具体方法已经在(1)中说明;此处我想着重强调一下,字符串之间的大小比较,与长度没有直接关系,就好比第四行代码,两个字符串在比较时,第一位字符,e > a (ascll 值)那么直接得出结果,前者大。而后者的“bcdefg”根本就不用看。

字符串数字(‘50’>‘6’) 之间比较大小,不要被表面,或者说是数字思维控制我们判断。
按照正常思维,50>6 ,是true,没有任何问题,但是’50’>‘6’,难以见的。
正确的判断应该是从字符串的基础上出发,将’50’看作‘5’+‘0’的拼接,那么字符串比较大小,老规矩,从左到右对其 比大小,'50’第一位为’5’对应ACSll值 53 ;'6’的ACSll 值为54。所以;‘50’<'6’没毛病。

console.log('5'.charCodeAt())   //53
console.log('6'.charCodeAt())	//54

针对上述字符串数字的比较大小问题结合实际学习开放中,注意转换数据类型
避免:出现明明需要比较的数字大小,变成了字符串大小。

重点说一下,字符串比较中的空(null)与 空格(space)

		// 	比较空null与空格
        // console.log('' < ' ')
        let a = ''    //空
        let b = ' '		//空格
        console.log(a < b)		//结果为true
        console.log(typeof a)	//string
        console.log(typeof b)	//string
        

在这里插入图片描述
在这里插入图片描述
点击查看ASCll表

空的ASCll值为0,空格为32,两者是有区别的,具体也可以验证,如下转换代码

console.log(''.charCodeAt())   //空 转换为ASCll值
console.log(' '.charCodeAt())  //空格转换为ASCll值

看结果
在这里插入图片描述
空格是32 没有问题,但此时的空,换成ACSll是NaN(下面介绍NAN是什么,但是并不是预期的0)。
那就反向看看0对应的ASCll的符号是什么?

   console.log(String.fromCharCode(97)) //保证代码的正常性用97 也就是a 做对比
   console.log(String.fromCharCode(0))
   console.log(String.fromCharCode(65)) //保证代码的正常性用65 也就是A 做对比

结果:
在这里插入图片描述
也可看出0也就对应的空(没有内容),变相得到验证吧


(3)字符串类型与数字类型的比较

 		console.log(3 < '24')	//结果为true
 		console.log(40 < 'd')    //结果为false
        console.log(40 > 'd')    //结果为false
       

在数字类型(number类型)与字符串类型(string类型)比较时,不同类型之间比较会发生隐式转换(隐式转换后面会发布文章说明是什么##)
最终会把数据隐式转换转成一致的number类型再比较(规则)
》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《
特别注意:此时的转换数据类型,分几种情况::切记:

第一种情况:当遇到 console.log(3 < ‘24’),类似于这种数字类型与字符串类型的数字相比较,那么此时隐式转换发挥作用,将‘24’变成Number类型再作比较。

注意:这里的变成Number类型就好像经过下面这个显式转换

  console.log(Number('24'))   //结果为数字类型的 24 (蓝色字体)

只是简单的数据类型变化,并不涉及,字符串类型的数据通过ASCll码转换为十进制数值的操作。(千万千万)不要多想,例如:想什么“ '24’中’2’所对应的ASCll值,与‘4’所对应的ASCll值”。就单纯的把字符串型的24 变成了数字型的24

第二种情况:当遇到console.log(40 > ‘d’)或者 console.log(1 > ‘abc123’) 这种字符串是由数字+字母,或者纯字母组成的情况,因为是字符串类型与数字类型比较,最终都要转换成数字Number类型。
那么问题来了,情况2不是情况1那种纯数字的字符串,怎么转换为数字类型呢?


有的小朋友肯定这么想 将含字母的字符串类型数据,根据ASCll变成对应的十进制数字。
不过这种想法,是错的,千万千万千万千万不能想当然
我们来用代码测试:(手动将’abc123’转换成数字类型)

        console.log(Number('abc123'))  //结果为NaN

在这里插入图片描述

NaN属于数字类型,但NaN不等于任何值,包括它本身。表示非数字。
如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number)即不是一个数字

		console.log(NaN == NaN);  //结果为false
        console.log(NaN === NaN); //结果为false
        console.log(NaN > 5) //结果为false
        console.log(NaN < 5) //结果为false

上面代码可以看出,NaN连自己是多少都不知道,自己都不等于自己。在后面与任何数比较都将是 flase。所以当遇到情况2:数字类型与字符型字母(字母+数字)比较的时候,不用多想,flase!


第二种情况:总结:/字符串和数字进行比较 字符串为非纯数字时,则将非数字字符串转成数字的时候会转换为NaN,当NaN和数字比较时不论大小都返回false.

(4)相等与全等的判断

==: 左右两边是否相等;

        // ==:是否相等,只判断数值,不判断数据类型;
        console.log(5 == '5')	//true
        console.log(5 == 4)		//false
        console.log('4' == '4')	//true

===: 左右两边是否类型和值都相等;

// ===: 判断全等,判断数值,同时判断数据类型    
        console.log(5 === '5')  //false
        console.log(5 === '4')//false
        console.log(5 === 4)//false
        console.log('5' === '5')//true

!==: 左右两边是否不全等;

     	 console.log(5 !== 5)	//false
         console.log(5 !== 4)//true
         console.log('5' !== 4)//true
         console.log('5' !== 5)//true

在命运给你安排的时区里,一切都是准时的*

  • 23
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值