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中的关系运算符包括: < 小于 <= 小于或等于 > 大于 >= 大于或等于 = ...
随机推荐
- 前端知识点回顾——Javascript篇(一)
DOM特殊元素获取 document.documentElement //HTML标签 document.head //head标签 document.title //title标签 document ...
- ios-Runtime调用私有方法
有时在代码中会有需要调用私有方法的场景,如不想import太多头文件:想组件设计一些解耦的模块:查看别人模块中未暴露的代码进行分析等. 在 ios 中调用私有方法有很多种方式,主要是通过Runtime ...
- ftp服务器不能上传文件故障
1.在客户端lftp命令无法put文件 原因:登陆用户无法读写 ftp服务器的文件夹,在服务器上增加权限 chmod 777 即可 还有一种方法:在 vsftp的配置文件里,设置可匿名读写
- MATLAB学习(六)绘图图形功能
>> x=0:.1:2*pi;plot(x,sin(x),x,cos(x)) >> plot(x,sin(x),'p ...
- HTML基础知识自学教程
HTML 是用来描述网页的一套标记标签,是我们在web前端开发中的基础.下面PHP程序员雷雪松主要结合自己的经验给大家分享下HTML的基础知识,以及在自学过程中一些比较常用的和重要的HTML知识点. ...
- Django-DRF(1)
一. WEB应用模式 在开发Web应用中,有两种应用模式: 1. 前后端不分离 2. 前后端分离 二. API接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的 ...
- 【AMAD】django-oauth2-provider -- 为你的app提供Oauth2的访问
简介 个人评分 简介 django-oauth2-provider1主要是为django集成oauth2加入了不少的工具,比如装饰器,Base View, Authentication Backend ...
- 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
举报 说到显卡,就不免令人想到英伟达和AMD两家面向个人消费级和企业级最大的显示芯片生产企业,英伟达和AMD,今天小编为大家简单的介绍一下英伟达的显卡选购方面的攻略,为一些想要购买显卡的用户提供一些参 ...
- 用elasticsearch分析中国大学省份分布
1.去教育部官网下载excel数据:http://www.moe.gov.cn/srcsite/A03/moe_634/201706/W020170616379651135432.xls 2.把xls ...
- Python 筛选前缀文件
筛选某一文件下内具备某一前缀的文件: for file in files filename = os.path.listdir(file) if 'qianzhui--' in filename: # ...