9.JS运算符-比较运算符

javascript学习——比较运算符 比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。上面代码比较2是否大于1,返回true。注意,比较运算符可以比较各种类型的值,不仅仅是数值。JavaScript 一共提供了8个比较运算符。======!!==这八个比较运算符分成两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。 阅读详情

比较运算符

概述

比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。

2 > 1 // true

上面代码比较2是否大于1,返回true。

注意,比较运算符可以比较各种类型的值,不仅仅是数值。

JavaScript 一共提供了8个比较运算符。

  • > 大于运算符
  • < 小于运算符
  • <= 小于或等于运算符
  • >= 大于或等于运算符
  • == 相等运算符
  • === 严格相等运算符
  • != 不相等运算符
  • !== 严格不相等运算符

这八个比较运算符分成两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。

非相等运算符:字符串的比较

字符串按照字典顺序进行比较。

'cat' > 'dog' // false
'cat' > 'catalog' // false

JavaScript 引擎内部首先比较首字符的 Unicode 码点。如果相等,再比较第二个字符的 Unicode 码点,以此类推。

'cat' > 'Cat' // true'

上面代码中,小写的c的 Unicode 码点(99)大于大写的C的 Unicode 码点(67),所以返回true。

由于所有字符都有 Unicode 码点,因此汉字也可以比较。

'大' > '小' // false

上面代码中,“大”的 Unicode 码点是22823,“小”是23567,因此返回false。

非相等运算符:非字符串的比较

如果两个运算子之中,至少有一个不是字符串,需要分成以下两种情况。

(1)原始类型值

如果两个运算子都是原始类型的值,则是先转成数值再比较。

5 > '4' // true
// 等同于 5 > Number('4')
// 即 5 > 4

true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 0

2 > true // true
// 等同于 2 > Number(true)
// 即 2 > 1

上面代码中,字符串和布尔值都会先转成数值,再进行比较。

这里需要注意与NaN的比较。任何值(包括NaN本身)与NaN使用非相等运算符进行比较,返回的都是false。

1 > NaN // false
1 <= NaN // false
'1' > NaN // false
'1' <= NaN // false
NaN > NaN // false
NaN <= NaN // false

(2)对象

如果运算子是对象,会转为原始类型的值,再进行比较。

对象转换成原始类型的值,算法是先调用valueOf方法;如果返回的还是对象,再接着调用toString方法,详细解释参见《数据类型的转换》一章。

var x = [2];
x > '11' // true
// 等同于 [2].valueOf().toString() > '11'
// 即 '2' > '11'

x.valueOf = function () { return '1' };
x > '11' // false
// 等同于 [2].valueOf() > '11'
// 即 '1' > '11'

两个对象之间的比较也是如此。

[2] > [1] // true
// 等同于 [2].valueOf().toString() > [1].valueOf().toString()
// 即 '2' > '1'

[2] > [11] // true
// 等同于 [2].valueOf().toString() > [11].valueOf().toString()
// 即 '2' > '11'

{ x: 2 } >= { x: 1 } // true
// 等同于 { x: 2 }.valueOf().toString() >= { x: 1 }.valueOf().toString()
// 即 '[object Object]' >= '[object Object]'

严格相等运算符

JavaScript 提供两种相等运算符:==和===。

简单说,它们的区别是相等运算符(==)比较两个值是否相等,严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false,而相等运算符(==)会将它们转换成同一个类型,再用严格相等运算符进行比较。

本节介绍严格相等运算符的算法。

(1)不同类型的值

如果两个值的类型不同,直接返回false。

1 === "1" // false
true === "true" // false

上面代码比较数值的1与字符串的“1”、布尔值的true与字符串"true",因为类型不同,结果都是false。

(2)同一类的原始类型值

同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。

1 === 0x1 // true

上面代码比较十进制的1与十六进制的1,因为类型和值都相同,返回true。

需要注意的是,NaN与任何值都不相等(包括自身)。另外,正0等于负0。

NaN === NaN  // false
+0 === -0 // true

(3)复合类型值

两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false

上面代码分别比较两个空对象、两个空数组、两个空函数,结果都是不相等。原因是对于复合类型的值,严格相等运算比较的是,它们是否引用同一个内存地址,而运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false。

如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

注意,对于两个对象的比较,严格相等运算符比较的是地址,而大于或小于运算符比较的是值。

var obj1 = {};
var obj2 = {};

obj1 > obj2 // false
obj1 < obj2 // false
obj1 === obj2 // false

上面的三个比较,前两个比较的是值,最后一个比较的是地址,所以都返回false。

(4)undefined 和 null

undefined和null与自身严格相等。

undefined === undefined // true
null === null // true

由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

var v1;
var v2;
v1 === v2 // true

严格不相等运算符

严格相等运算符有一个对应的“严格不相等运算符”(!==),它的算法就是先求严格相等运算符的结果,然后返回相反值。

1 !== '1' // true
// 等同于
!(1 === '1')

上面代码中,感叹号!是求出后面表达式的相反值。

相等运算符

相等运算符用来比较相同类型的数据时,与严格相等运算符完全一样。

1 == 1.0
// 等同于
1 === 1.0

比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。下面分成几种情况,讨论不同类型的值互相比较的规则。

(1)原始类型值

原始类型的值会转换成数值再进行比较。

1 == true // true
// 等同于 1 === Number(true)

0 == false // true
// 等同于 0 === Number(false)

2 == true // false
// 等同于 2 === Number(true)

2 == false // false
// 等同于 2 === Number(false)

'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1

'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0

'' == false  // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0

'1' == true  // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1

'\n  123  \t' == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格

上面代码将字符串和布尔值都转为数值,然后再进行比较。具体的字符串与布尔值的类型转换规则,参见《数据类型转换》一章。

(2)对象与原始类型值比较

对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转换成原始类型的值,再进行比较。

具体来说,先调用对象的valueOf()方法,如果得到原始类型的值,就按照上一小节的规则,互相比较;如果得到的还是对象,则再调用toString()方法,得到字符串形式,再进行比较。

下面是数组与原始类型值比较的例子。

// 数组与数值的比较
[1] == 1 // true

// 数组与字符串的比较
[1] == '1' // true
[1, 2] == '1,2' // true

// 对象与布尔值的比较
[1] == true // true
[2] == true // false

上面例子中,JavaScript 引擎会先对数组[1]调用数组的valueOf()方法,由于返回的还是一个数组,所以会接着调用数组的toString()方法,得到字符串形式,再按照上一小节的规则进行比较。

下面是一个更直接的例子。

const obj = {
  valueOf: function () {
    console.log('执行 valueOf()');
    return obj;
  },
  toString: function () {
    console.log('执行 toString()');
    return 'foo';
  }
};

obj == 'foo'
// 执行 valueOf()
// 执行 toString()
// true

上面例子中,obj是一个自定义了valueOf()和toString()方法的对象。这个对象与字符串'foo'进行比较时,会依次调用valueOf()和toString()方法,最后返回'foo',所以比较结果是true。

(3)undefined 和 null

undefined和null只有与自身比较,或者互相比较时,才会返回true;与其他类型的值比较时,结果都为false。

undefined == undefined // true
null == null // true
undefined == null // true

false == null // false
false == undefined // false

0 == null // false
0 == undefined // false

(4)相等运算符的缺点

相等运算符隐藏的类型转换,会带来一些违反直觉的结果。

0 == ''             // true
0 == '0'            // true

2 == true           // false
2 == false          // false

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

上面这些表达式都不同于直觉,很容易出错。因此建议不要使用相等运算符(==),最好只使用严格相等运算符(===)。

不相等运算符

相等运算符有一个对应的“不相等运算符”(!=),它的算法就是先求相等运算符的结果,然后返回相反值。

1 != '1' // false

// 等同于
!(1 == '1')
uniapp微信小程序 - 详解map地图markers图标不显示问题,自定义图标真机调试不显示变成默认marker标记点图标(解决微信小程序map组件markers自定义图标失效,兼容安卓苹果手机) uniapp微信小程序 map地图markers图标不显示,markers图标真机调试不显示,uniapp map地图显示图标markers问题,自定义图标不显示,添加marker后不显示,uniapp 微信小程序 map marker图标不显示如何解决,uniapp小程序地图的marker图标不显示问题,微信小程序map组件markers自定义图标真机显示问题,uni-app, 微信小程序, map组件, markers图标不显示, 真机调试, 微信小程序map组件,地图加载后marker标记点ios设备 阅读详情

相关推荐

LVI-SAM适配KITTI数据集避坑指南:IMU频率与数据同步问题解析

本文深入解析了将LVI-SAM框架适配KITTI数据集时,在IMU频率与多传感器数据同步方面遇到的核心挑战与解决方案。针对KITTI数据集中sync与extract两种数据包的差异,文章提供了从数据选择、参数调优到时间戳诊断与修复的完整避坑指南,帮助开发者实现稳定高效的SLAM系统部署。

7z8x2c4v6b9的博客 247

比较运算符

比较运算符 我们在写逻辑语句时会经常使用比较运算符,用来测定变量或值是否相等。比较运算符有七种,分别是:==(等于)、===(全等)、!=(不等于)、>(大于)、<(小于)、>=(大于或等于)和<=(小于或等于)。 1.==(等于)代码以及控制台输出结果如下: ...

weixin_44543272的博客 1万+

电子病历编辑器源码(Springboot+原生HTML)

应用场景包括:电子病历书写、体温单录入、全平台信息采集、检验检查报告、不良事件上报等。 此外,电子病历编辑器软件还适用于医生工作站的病历编辑、护士工作站的护理记录输入、PASC/LIS/RIS报告编辑打印、病案首页、出院小结、病程记录、手术记录、各种知情书、康复及精神学科用的量表、临床路径用表单界面等等。 这些应用场景都涉及到了医疗文书编辑的需求,因此电子病历编辑器软件在这些场景中具有广泛的应用价值。

xingchen优快云的博客 3894

JavaScript比较运算符

比较运算符用于比较两个值的大小,返回一个布尔值1 > 2;//true比较运算符不仅可以用于数字,各种类型的值都可以比较大小。JavaScript一共提供了8种比较运算符> 大于运算符< 小于运算符>= 大于或等于运算符

qq_44621394的博客 1617

吹气压力传感器US6310 US6330调试

更换压力传感器, 从US6310 更换为US6330。 6310有一个准备好引脚,AD转换完成后会给MCU一个脉冲 而6330就没有这个功能,6330这个引脚是用来选择SPI还是I2C接口的。(6330没有复位引脚,内部有POR功能) 因此在实现上是有根本区别的, 其它方面使用的命令也不一样, 6310 A8 A9两条命令,一个命令模块醒来,一个命令模块休眠, 6330只有一条命令AA, 命令模块开始转换。 针对这2个模块作为2种处理方法, 1. 6310,可以设置一...

明天乌儿会歌唱 2023

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

JavaScript 比较运算符

比较运算符用于比较两个表达式的结果。如变量num加上变量offset是否大于0,大于就是一个比较运算符。比较运算符还分为相等运算符与关系运算符。

weixin_62394768的博客 1749

gnuradio+b210实现FM收音机

gnuradio+b210实现FM收音机环境介绍FM接收1 Flow Graph2 变量参数FM发射1 Flow Graph 环境介绍 Name Version gnuradio 3.7.14.0 uhd 3.15.0.0 ubuntu 18.04 usrp b210 参考 https://www.ijedr.org/papers/IJEDR1702038.pdf Audio File Transmission using GNURADIO and USRP FM接

u011745228的博客 5126

JavaScript学习笔记——不同类型变量的比较和运算:运算符(==、===、+等)和类型转换(“9“==9)

运算符 JavaScript中的运算符有==、===、!=、!==、>、<、+、-、*、/等 大部分运算符会自动执行类型转换,统一类型以进行后续操作 加法+运算符:将数字(或布尔值)转换为字符串 加法+运算符只要遇到字符串,会执行拼接(Concatenation),结果一定为字符串 3+"1"结果为"31" 1+1+"9"+1+1结果为"2911" true+"love"结果为"truelove" true+"1"结果为"true1" true+1+"1"结果为"21" 注意:1+1+"9"+

Insomnia_X的博客 462

Oracle入门——基础语法篇

ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。

麦当当的博客 3089

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

你需要知道的每个JavaScript运算符

JavaScript 运算符是帮助你操作值、执行计算、做出决策和控制代码流的基本构建块。在本文中,我们将介绍,这些运算符你作为开发者会经常使用。我们将从基本的赋值运算符开始,逐步介绍更高级的运算符,如解构赋值、空值合并、展开和剩余运算符。

qq_28791753的博客 1080

dy创作者平台上传并发布视频

整体上来说不是很难,就是过程有点复杂。因为这个是别人给的单子,所以这里不放源码了。细致一点就可以搞定。如果要Signature算法,可私信,不免费。

记录一些web逆向的过程 1515

第3课:运算符与流程控制——JS的“决策者”

欢迎来到「JavaScript 魔法学院」第 3 课!今天我们将化身代码世界的“指挥官”,用计算数据,用做出决策!文末实战带你用,绝对震撼!

weixin_52814911的博客 504

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JS学习笔记一 运算符、数据类型、变量、条件语句、循环语句

一、JS的位置 1.可以将js代码编写到外部js文件中,然后通过script标签引入

qq_45231291的博客 487

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaScript

/注意:页面的换行指的是<br> 控制台的换行才是 \n。// 90~100分为优秀,80~90分为良好,70~80分为中等,60~70分为及格,分数小于60则为不及格。原文链接:https://blog.csdn.net/chenjialun2003/article/details/133237173。//注意:页面的换行指的是<br> 控制台的换行才是 \n。// 使用switch语句判断变量week的值,若week变量的值为1~6时输出“星期一”~“星期六”,…for(var i = 1;

2301_78817487的博客 143

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

第三讲 《javascript 比较运算符 逻辑运算符》

js 运算符 在逻辑运算符中: && || ! //逻辑表达式 // 只有两个表达式的情况 // 先看 第一个表达式转换成布尔值的结果, 如果结果为真, 那么会...

唐僧的专栏 509

【进阶】【JS逆向】【5.JavaScript 基础语法】运算符,算术运算符,比较运算符,逻辑运算符,赋值运算符,位运算符

运算符 1. 算术运算符 2. 递增和递减运算符 前置递增运算符 后置递增运算符 前置递增和后置递增小结 3. 比较(关系)运算符 4. 逻辑运算符 逻辑与 && 逻辑或 || 逻辑非 ! 短路运算(逻辑中断) 逻辑与 逻辑或 5. 赋值运算符 6. 位运算符

weixin_43612602的博客 1280

一文搞懂JavaScript 运算符 – 逻辑、比较、三元和更多 JS 运算符

当总购买量为 3 美元或更多时,您可以享受 20 元的折扣。否则,您提供 1 元的折扣。也称为无符号右移运算符,零填充右移运算符用于将位的位置向右移动,同时将符号位更改为。由于类型强制可能导致不需要的行为,因此在执行相等比较时应使用严格的相等运算符。按位运算符是将其操作数视为一组二进制数字,但将运算结果作为十进制值返回的运算符。二进制数00000011表示十进制数 3,因此上面的 OR 运算符返回 3。相等运算符检查左侧的值是否等于右侧的值。例如,假设您要比较变量的值是否大于 1。

m0_48069349的博客 422

通过示例学习 JavaScript 运算符 - 逻辑、比较、三元和更多 JS 运算符

在本教程中,您学习了 7 种 JavaScript 运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符、typeof 运算符和按位运算符。这些运算符在 Web 开发中很少使用,因此如果您只想学习实用的东西,可以跳过这部分。请记住,您可以混合使用这些运算符来执行复杂的数学方程。它是较新的 JavaScript 运算符之一,您可以使用它来计算数字的幂(基于其指数)。由于类型强制可能会导致不需要的行为,因此在进行相等比较时,您应该使用严格相等运算符。

wly476923083的博客 294

《JavaScript 比较和逻辑运算符》

JavaScript比较和逻辑运算符 比较和逻辑运算符用于测试true或者false。 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等。 x=5,下面的表格解释了比较运算符: 运算符 描述 比较 返回值 实例 == 等于 x==8 false 实例 » x==5 true 实例 » ...

yexiang优快云的专栏 498

Javascript比较运算符详解

本文和大家分享的主要是javascript比较运算符相关内容,一起来看看吧,希望对大家学习javascript有所帮助。   比较运算符 >、>=、、、==、!=、===、!==   注意 比较运算符的结果为布尔类型 ==只比较值是否相等、===比较值和类型   实例 //字符串连接符+ document.write('hello'+' mai

lidiya007的博客 709

js中关系运算符

/*   关系运算符的运算结果为: boolean类型(true/false)    ==  只是比较两个值是否相等,不会比较类型    === 除了比较值,还会比较类型*/console.log(8=='8');//trueconsole.log(8==='8');//false//关系运算符两端,只要有一个是number类型,另外一个会隐式转换成number,再进行比较。console.log...

qazwsx_edc1的博客 927

Educoder JavaScript语法基础:JS运算符

JavaScript语法基础:JS运算符 文章目录JavaScript语法基础:JS运算符第1关:JavaScript知识训练-运算符通关知识第2关:算术运算符相关知识`+ - * / %`运算符递增运算符和递减运算符字符串与数的转换编程要求测试说明通关代码第3关:比较和逻辑运算符相关知识比较运算符逻辑运算符编程要求测试说明通关代码第4关:条件运算符相关知识条件运算符编程要求测试说明通关代码第5关:运算符的优先级和结合性相关知识运算符的优先级运算符的结合性编程要求测试说明通关代码 第1关:JavaScrip

一只小鹿的博客 1033

JavaScript运算符

运算符也被称为是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript常用运算符有:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件运算符。

m0_56065994的博客 1053

javascript从入门到跑路-----小文的js学习笔记(5)--------js运算符----算数、赋值、比较、一元、二元、三元运算符

** javascript从入门到跑路-----小文的js学习笔记(1)---------script、alert、document。write() 和 console.log 标签 … … javascript从入门到跑路-----小文的js学习笔记目录 ** 1、算术运算符:+(加) -(减)*(乘) /(除) %(取模) (+):      ...

qq_45948983的博客 1425
上一篇: 8.JS运算符-算术运算符
下一篇: 10.JS运算符-布尔运算符
陈塘关哪吒
博客等级 码龄11年 52粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值