js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)

简介: js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)

比较——数字 vs 数字

比较原理:将所有数字转换为十进制的数字后,根据数值大小进行比较

  • 0开头的数字会被认成是八进制数字,比如 63<0100<65 ,因0100转为十进制 Number(0100) 后的值为64
  • 在严格模式中,禁止使用0开头的数字这种表示法,会报错。
10 < 11  // true
0100 < 65  // true  0100被视为八进制数字,转为10进制数字后,值为64

比较——数字 vs 非数字类型的数据

比较原理:先将非数字类型的数据转换为数字,再将所有数字都转换为十进制的数字,最后根据数值大小进行比较

通过【 Number(数据) 】 可以获取数据转换为数字后的值

字符串

纯数字的字符串转为数字时,得到对应的数字。  Number('20') 得到 20  

0开头的纯数字的字符串,会先去掉头部的所有0。 Number('0100') 和 Number('00100') 都会得到100

非纯数字的字符串,因无法转化为数字,都会得到NaN,而 NaN 和任何数字(任何值,包括NaN自己)比较都会得到 false

'10' < 11  // true   '10'转为数字为10
'0100' < 65  // false  '0100'转为数字为100
'0100a' < 65  // false  '0100a'转为数字为NaN,NaN与任何值比较都是false
'0100a' > 65  // false  '0100a'转为数字为NaN,NaN与任何值比较都是false

布尔型

  • false 转化为数字为 0  
  • true 转化为数字为 1

数组

  • [] 空数组转化为数字为 0  
  • [12]或 ['12'] 只有一个可转换为数字的元素的数组转化为数字为 12
  • [12,2]等所有无法转为数字的数组转化为数字为 NaN

对象

  • 时间对象可以转化为数字,值为时间对应的时间戳,相当于执行了时间对象的.getTime() 方法
  • {} 等其他无法转换为数字的对象转化为数字为 NaN
Number(new Date())   // 得到执行时时间对应的时间戳1620872129032

undefined 转化为数字为 NaN

null 转化为数字为 0

比较——字符串 vs 非数字类型的数据

比较原理:先将非数字类型的数据转换为字符串,再从左到右,依次取出字符串各位上的字符,根据字符的Unicode 编码值的大小进行比较,直到得出最终的比较结果

通过【数据.toString() 】 可以获取数据转换为字符串后的值

通过【字符.charCodeAt() 】 可以获取字符的Unicode 编码值

'a' < 'b'  //true  'a'.charCodeAt()为97  'b'.charCodeAt()为98
'aa' < 'ab'  //true  第1位字符相等,比较第2位字符
'a' < 'ab'  //true  第1位字符相等,比较第2位字符,若字符缺失,则无字符永远小于有字符
 
// ['a','a'] 转换为字符串为  'a,a'
// ','.charCodeAt()为44
// ' '.charCodeAt()为32
'a,a' < ['a','b']   //true 
'a a' < ['a','a']  //true 

lodash常用的比较函数

相等

var object = { 'a': 1 };
var other = { 'a': 1 };
 
_.eq(object, object);
// => true
 
_.eq(object, other);
// => false
 
_.eq('a', 'a');
// => true
 
_.eq('a', Object('a'));
// => false
 
_.eq(NaN, NaN);
// => true

深比较

var object = { 'a': 1 };
var other = { 'a': 1 };
 
_.isEqual(object, other);
// => true
 
object === other;
// => false

大于

大于等于 _.gte

_.gt(3, 1);
// => true
 
_.gt(3, 3);
// => false
 
_.gt(1, 3);
// => false

小于

小于等于 _.lte

_.lt(1, 3);
// => true
 
_.lt(3, 3);
// => false
 
_.lt(3, 1);
// => false



目录
相关文章
|
2天前
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
2天前
|
JavaScript 前端开发 索引
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
8 1
|
2天前
|
存储 JavaScript 前端开发
js/javascript 操作字符串【全】(含常用的操作字符串的lodash)
js/javascript 操作字符串【全】(含常用的操作字符串的lodash)
5 1
|
9天前
|
存储 JavaScript 前端开发
JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)
【6月更文挑战第25天】JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)。
13 2
|
15天前
|
JavaScript 前端开发
JavaScript进阶-模板字符串与增强的对象字面量
【6月更文挑战第19天】ES6的模板字符串和增强对象字面量提高了JavaScript的易读性和效率。模板字符串(` `)支持变量嵌入和多行,简化了字符串处理;增强对象字面量允许简写属性与方法,以及动态属性名。注意模板字符串的闭合和性能影响,以及对象字面量的简写语法和计算属性名的恰当使用。通过实例展示了这两项特性的应用,助力编写更优雅的代码。
|
19天前
|
JSON JavaScript 前端开发
js将json字符串还原为json
【6月更文挑战第15天】js将json字符串还原为json
20 4
|
20天前
|
JavaScript 前端开发
JS字符串拼接的几种方式
JS字符串拼接的几种方式
|
20天前
|
JavaScript
请用 js 去除字符串空格?
请用 js 去除字符串空格?
|
23天前
|
存储 JavaScript 前端开发
JavaScript基础-字符串操作方法
【6月更文挑战第11天】本文介绍了JavaScript中字符串的基本操作,包括创建与访问、查找与替换、大小写转换等,并强调了字符串的不可变性。通过实例代码展示了如何避免常见错误,如混淆查找与替换方法、正则表达式使用不当。学习这些技巧能提升代码健壮性和效率。
|
1天前
|
存储 JavaScript 前端开发