JavaScript 关系运算符

🌙
手机阅读
本文目录结构

JS 关系运算符

同布尔值来表示两个数据之间的关系

大小关系检测

  • >
    • 如果A大于B,则返回true,否则返回值为false
  • <
    • 如果A小于B,则返回true,否则返回值为false;
  • <=
    • 如果A小于等于B,则返回值为true,否则返回false
  • >=
    • 如果A大于等于B,返回true,否则返回值为false
//关系操作符
var testNum=3;
console.log("下面是关系操作符");
console.log(testNum>1);
console.log(testNum>=1);
console.log(testNum<1);
console.log(testNum<=1);

操作规则

  • 数值与数值的比较,比较他们的代数值;
  • 仅一个运算数是数值,将另一个运算数转换成数值,并比较他们的代数值;
  • 字符串间的比较,逐字符比较他们的Unicode数值;//""
  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;
    • 只要有一个是数值,另外一个无论什么值,都会最终转为数值后再比较)
  • 运算数既非数字也非字符串,返回值为false
  • 与NaN比较,返回值是false;
console.log("20">"100000");//true
console.log(null>2);//false
console.log(NaN>2);//false

注意:做关系比较的时候,一定要把值全部转为数字类型,这是一个很好的习惯;一定要避免2个字符串在一起比较大小;

等值关系检测;( == 和 === )

相等比较

  • 操作符
    • == 比较两个运算数的返回值看是否相等;(和正常生活中的=一定要区分开;)
    • = 比较两个运算数的返回值看是否不想等;
  • 类型转换
    • 布尔值
      • True 1;
      • False 0;
    • 对象,调用valueOf() 基本类型
    • 字符串与数值的比较,字符串转换为数值;
  • 比较原则
    • Null与undefined;相等,比较前不做任何转换;
    • NaN,与任何数值都不想等,包括其自身;
    • 对象,是否属于同一个对象
      • 是 ==
      • 否 !=

var testNum=3;
console.log("下面是关系操作符");
console.log(testNum==1);
console.log(testNum===1);
console.log(testNum!=1);

【我手动画的转换图】

//转换分析1
console.log("zhuanbang"?true:false);//true,因为非空的字符串是一个真值;

//转换分析2
console.log("zhuanbang"==true);//这个时候输出什么呢?在分析一里非空字符串是一个true,那么非空字符串==true吗?

//转换分析3
console.log("zhuanbang"==false);//如果上面的的返回不是true,那么这个会返回true吗?

//下面的分析的步骤;
/*转换分析2-解析
* 1、右边的布尔值会转为数字,true->1;"zhuanbang"==1
* 2、左边的字符串会转为数字,"zhuanbang"因为里面有字母,所以转换为NaN;NaN==1
* 3、NaN和任何数据都不想等,包括自己,所以结果是false,并不是true;
* */

/*
* 1、右边的布尔值会转为数字,false->0;"zhuanbang"==0
* 2、左边的字符串会转为数字,"zhuanbang"因为里面有字母,所以转换为NaN;NaN==0
* 3、NaN和任何数据都不想等,包括自己,所以结果是false,结果也不是true
* */

相同比较(也叫绝对相等/全等)

  • 运算符
    • === 比较两个运算数的返回值以及数据类型是否相同;
    • !== 比较两个运算数的返回值以及数据类型是否不相同
  • 比较原则
    • 值类型间比较,只有数据类型相同,且数值相等时才能够相同;
    • 值类型与引用类型比较,肯定不相同,
    • 引用类型间的比较,比较他们的引用值(内存地址)

简单的说,就是x和y比较,如果两者的类型不同,那就没有比较的意义了,直接返回false;

//相同的小分析
console.log("zhuanbang"===true);
console.log("1"===1);
console.log("zhuanbang"==="zhuanbang");
var person1={name:"zhuanbang"};
var person2={name:"zhuanbang"};
console.log(person1===person2);//false, 是不同的引用地址;在堆内存中储存是不一样的; 

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

目前重心已经放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>