js之运算符(关系运算符)
关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或者是false.关系表达式总是返回一个布尔值。
具有如下8个关系运算符:大于(>),小于(<),小于等于(<=),大于等于(>=),相等(==),不等(!=),恒等(===),不全等(!==)。从下面几个方面来分析:
一、相等和不相等运算符
“===”:恒等运算符,也称是严格相等运算符,只有在无需类型转换运算数就相等的情况下才为true.
<script>
console.log('2' === 2); //false 二者的类型不同
console.log(undefined === undefined); //true 二者的类型与值都相同
console.log(NaN === NaN); //false NaN和任何值都不相等包括NaN
console.log('abc' === 'acb'); //false 字符串的相等,要长度和相应位置一样才相等
console.log([] === []); //false 对象的相等必须是引用的相等才可以
console.log(10 === 0xa); //true 转换成十进制进行比较
</script>
"==":相等运算符和“===”恒等运算符相类似,但是它没有那么的严格,如果两个操作数不是同一类型,它会进行转换后再进行比较是否是相等。
当操作数类型一样时,比较的规则和恒等运算符一样,都相等才相等;
当操作数类型不一样时,会按如下规则来判定:
如果一个值是对象类型,另一个是原始类型,则对象类型会通过valueOf()方法进行转换,转换成原始值,如转换的不是原始值,则通过toString()方法转换再进行比较;
在对象转换为原始值后,如果两个操作数是字符串,则进行字符串的比较,如果里面有一个操作符不是字符串,那两个操作数通过Number()方法进行转换,转成数字进行比较.
<script>
console.log('abc' == 'abc'); //true 类型相等,值也相等,当然相等
console.log(NaN == NaN); //false NaN和任何者不等
console.log([] == []); //false
console.log(10 == 0xa); //true 转换成十进制进行比较是否相等
console.log(true == 0); //false true转换成数字为1
console.log(true == '1'); //true
console.log([1] == 1); //true
console.log(true == 1); //true
console.log(null == undefined); // true null和undefined是相等的
console.log(0 == null); // false 0和null不等
console.log('' == false); //true 空字符串转成0和false相等
</script>
"=": 可以看成是得到或者是赋值。作用是把等号右边的值赋予等号左边的变量或属性。
赋值操作符的结合性是从右到左,也就是说,如果一个表达式中出现了多个赋值运算符,运算顺序是从右到左。
“!==”:恒不等运算符,又称严格不等运算符。操作数的比较过程与恒等运算符相同,结果取反就可。
“!=”:不相等运算符。它的操作数比较的过程和与相等运算符相同,结果取反即可。
注意:undefined只与null相等,与其它任何值相比较都不相等。字符串相对比,比较的是字符对应的ASCII码。
<script>
console.log([] !== []); //true
console.log( !== true); //true
console.log('' !== ); //true
console.log(NaN !== NaN); //true console.log('' != true); //false
console.log(null != undefined);//false
console.log(NaN != ''); //true
console.log(undefined == null); //true
</script>
二、比较运算符
它用来检测两个操作数的大小关系。有大于(>),小于(<),小于等于(<=),大于等于(>=)。
1、大于运算符
大于运算符的操作数可能是任意类型,然而,只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换。规则如下:
如果操作数是对象,则这个对象将先使用valueOf()转换成原始值,如果结果还不是原始值,则再使用toString()方法转换;
在对象转换为原始值之后,如果两个操作数都是字符串,则按照字母表的顺序对两个字符串进行比较,这里提到的字母表顺序是指组成这个字符串的16位unicode字符的索引顺序;
在对象转换为原始值之后,如果至少有一个操作数不是字符串,则两个操作数都转换成数字进行比较。
需要注意的是Javascript字符串是一个由16位整数值组成的序列,字符串的比较也只是两个字符串中的字符的数值比较,由unicode定义的字符编码和任何特定语言或者本地语言字符集中的传统字符编码顺序不尽相同。字符串比较是区分大小写的,所以一般首先会将字符串通过String.toLowerCase()或者是String.toUpperCase()做大小写的转换。
2、大于等于运算符
大于等于运算符并不依赖于大于或等于运算符的比较规则,而是遵循小于运算符的比较规则,结果取反
3、小于等于运算符
小于等于运算符(<=)并不依赖于小于或等于运算符的比较规则,而是遵循大于运算符的比较规则,结果取反。
4、小于运算符
小于运算符(<)用于比较两个操作数,如果第一个操作数小于第二个操作数,则小于运算符的计算结果为true,否则为false。
三、in运算符
in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象有一个名为左操作数值的属性名,那么表达式返回true.
<script>
var point = {
x: 1,
y: 2
} //定义一个对象
console.log("x" in point); //true 对象里有一个名为”x"的属性
console.log("d" in point); //false对象里没有一个名为”d"的属性
</script>
四、instanceof运算符
instanceof运算符希望左操作是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则返回true,否则为false.
<script>
var d = new Date(); //通过Date()构造函数来创建一个新的对象
console.log(d instanceof Date); //true d是由Date()创建的
console.log(d instanceof Object);//true 所有的对象都是Object的实例
console.log(d instanceof Number);//false d不是一个Number对象
</script>
js之运算符(关系运算符)的更多相关文章
- java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...
- JS基础_关系运算符
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- javascript运算符——关系运算符
× 目录 [1]恒等 [2]相等 [3]大于[4]小于 前面的话 关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值,通常在if.while或 ...
- C语言基础学习运算符-关系运算符
比较大小 首先,我们得先了解一下布尔类型.C语言的C99标准支持布尔类型,关键字为_Bool,用于表示逻辑值true与false.C语言用值1表示true, 用值0表示false.因此布尔类型实际上是 ...
- 算数运算符& 关系运算符
java中的算数运算符 + - * / % ++ -- + +: 加法运算符 - : 减法运算符 *: 乘法运算符 / : 除法运算符 注意: 除数不能为0,除数为0会报出异常 整数运算默认得到整数, ...
- 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...
- 十一、 BOOL类型、分支结构和关系运算符
BOOL类型:表示非真即假.只有两个值:YES和NO,而二进制只识别二进制数,所以,将YES替换为“1”,NO替换为“0” BOOL数据类型占一字节的空间内存 BOOL数据类型输出为:%lu:输入为: ...
- shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符
shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有 ...
- shell之算数运算符、逻辑运算符、关系运算符、布尔运算符、文件测试运算符
注意事项: (1)bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用: (2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Es ...
- MATLAB关系运算符和逻辑运算符
1 关系运算符 关系运算符用来比较两个数之间的大小关系,在Matlab中的关系运算符包括: < 小于 <= 小于或等于 > 大于 >= 大于或等于 = ...
随机推荐
- AB窗体互传参数本质
一.找了好几个,都不靠谱,不是说不靠谱,自己感觉太繁琐,根本就是本窗体的属性(对象)的传递,1实例化2把实例化后的窗体属性=本窗体的对象 二.传递的的时候都是在互相引用的时候传递,推荐的个人认为最简单 ...
- ubuntu16.04下如何安装mkimage工具?
答: sudo apt-get install u-boot-tools -y
- C++ STL——输入输出流
[TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 缓冲区 (1)标准输入:从键盘输入数据到程序(input) (2)标准输出:程序数据输出 ...
- 深度学习之NLP获取词向量
1.代码 def clean_text(text, remove_stopwords=False): """ 数据清洗 """ text = ...
- launchImage设置后在启动时无法显示
有人问我他的APP设置了启动页,然后居然不显示.....我觉得应该不可能啊,然后我自己再次实现了一下设置启动页,这个问题好像以前从来没有注意过,也没有很深刻的掌握APP启动页的设置和注意事项,今天遇到 ...
- docker下载镜像
注意:必须先搜索镜像,否则有时候无法下载 Docker下载Redis镜像并运行容器 .搜索查找镜像 docker search redis .下载镜像 docker pull redis:latest ...
- RocketMQ之九:RocketMQ消息发送流程解读
在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...
- webbench接口并发测试
webbench接口并发测试 安装 安装工程中可能会出现确实Ctags的情况,可以进行命令安装: Ubuntu:apt install ctags Centos:yum install cta ...
- hadoop第一个程序WordCount
hadoop第一个程序WordCount package test; import org.apache.hadoop.mapreduce.Job; import java.io.IOExceptio ...
- idea连接docker实现一键部署
一.修改配置文件,打开2375端口 [root@microservice ~]# vim /usr/lib/systemd/system/docker.service 在ExecStart=/usr/ ...