算数运算符与关系运算符_「js基础」JavaScript关系运算符和对象运算符

上一篇文章呢,我们讲述了JavaScript运算符中的算术运算符自增与自减,那么紧接上一篇的文章我们今天来说说关系运算符

算数运算符与关系运算符_「js基础」JavaScript关系运算符和对象运算符_第1张图片

同样的关系运算符也是在平常用的很多,分为大小关系检测等值关系检测

大小关系检测就是说比大小,与我们数学中的比较丝毫不差,

等值关系检测呢,就有点区别了,分为相等比较相同比较

算数运算符与关系运算符_「js基础」JavaScript关系运算符和对象运算符_第2张图片

关系运算符——大小关系检测

用于进行比较的运算符称作为关系运算符

1、大小关系检测

用于大小关系检测的运算符有:小于()、小于等于(<=)、大于等于(>=)

  • <=:如果A小于等于B,则返回值为true,否则返回值为false
  • >=:如果A大于等于B,则返回值为true,否则返回值为false
  • >:如果A大于B,则返回值为true,否则返回值为false

例如:

var box=3 < 2; //efalsevar box=3 >= 3; //falsevar box= '3' > 22; //falsevar box= '3' > '22'; //true

比较规则

  • 数值与数值比较,比较的是它们的代数值。
  • 仅一个运算符是数值,将另一个运算数转化成数值,然后比较它们的代数值。
  • 字符串之间的比较,将运算数转化成字符串并进行比较。
  • 运算数即非数字也非字符串,转化成字符串或数值进行比较。
  • 运算数无法被转化成数值或字符串,返回值为false。
  • 与NaN的比较,返回值为false。

例如:

var box=3 > 2; //truevar box=3 > 22; //falsevar box= '3' > 22; //falsevar box= '3' > '22'; //truevar box= 'a' > 'b'; //false a=97,b=98var box= 'a' > 'B'; //true B=66var box= 1 > 对象; //false,如果有toString()或valueOf()则返回1 > 返回数的值

关于字符串的转化,我在我的上一篇文章中已经提到了,你可以去看一看。

2、等值关系检测

等值关系下分为:相等比较和相同比较,注意这里是相同和相等的区分,两者是不一样的哦!

1、相等比较

相等比较是使用运算符(==)和(!=)来比较的。

==:比较两个运算数的返回值看是否相等

!=:比较两个运算数的返回值看是否不相等

例如:

var box = 2 == 2; //truevar box = '2' == 2; //true,'2'会转成成数值2var box = false == 0; //true,false转成数值就是0var box = 'a' == 'A'; //false,转换后的编码不一样var box = 2 == {}; //false,执行toString()或valueOf()会改变var box = 2 == NaN; //false,只要有NaN,都是falsevar box = {} == {}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同var age = {};var height = age;var box = age == height; //true,引用地址一样,所以相等var box = '2' === 2 //false,值和类型都必须相等var box = 2 !== 2 //false,值和类型都相等了

比较规则:

  • 一个操作数是布尔值,则比较之前将其转换为数值,false转成0,true转成1
  • 一个操作数是字符串,则比较之前将其转成为数值再比较
  • 一个操作数是对象,则先调用valueOf()或toString()方法后再和返回值比较
  • 不需要任何转换的情况下,null和undefined是相等的
  • 一个操作数是NaN,则==返回false,!=返回true;并且NaN和自身不等
  • 两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返回true,否则返回false
  • 在全等和全不等的判断上,比如值和类型都相等,才返回true,否则返回false

2、相同比较

比较是使用运算符(===)和(!==)来比较的。

===:比较两个运算数的返回值数据类型看是否相同

!==:比较两个运算数的返回值数据类型看是否不同

例如:

var num = 1;  var str = '1';var test = 1; test == num  //true 相同类型 相同  test === num //true 相同类型 相同值 test !== num //false test与num类型相同,其值也相同, 非运算肯定是falsenum == str  //true  把str转换为数字,检查其是否相等。  num != str  //false == 的 非运算 num === str //false 类型不同,直接返回false num !== str //true  num 与 str类型不同 意味着其两者不等 非运算自然是true

注意

== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

=== 和 !== 只有在相同类型下,才会比较其值。(值和类型都相同的情况下比较)

==, 两边值类型不同的时候,要先进行类型转换,再比较。

===,不做类型转换,类型不同的一定不等。

比较规则:

  • 值类型间比较,只有数据类型相同,且数值相等时才能够想同
  • 值类型与引用类型比较,肯定不相同
  • 引用类型间比较,比较他们的引用值
算数运算符与关系运算符_「js基础」JavaScript关系运算符和对象运算符_第3张图片

对象运算符

对象操作运算主要是针对对象、数组、函数这 3 类复合型对象执行某种程序,设计的运算符包括 ininstanceofnewdelete,额外还包含 . [] ()

in:判断左侧运算符是否为右侧运算符的成员。例如:

var o = {  //定义对象    a : 1,  //定义属性a    b : function() {}  //定义方法b}console.log("a" in o);  //返回trueconsole.log("b" in o);  //返回trueconsole.log("c" in o);  //返回falseconsole.log("valueOf" in o);  //返回true,继承Object的原型方法console.log("constructor" in o);  //返回true,继承Object的原型属性

上述代码检测属性 a、b、c、valueOf 是否为对象 o 的成员。

instanceof:判断对象实例是否属于某个类或构造函数,例如:

var a = new Array();  //定义数组console.log(a instanceof Array);  //返回trueconsole.log(a instanceof Object);  //返回true,Array是Object的子类console.log(a instanceof Function);  //返回false

上述代码检测数组 a 是否为 Array、Object 和 Function 的示例。

:如果左侧操作数不是对象,或者操作数不是类型函数,则返回 false。如果右侧操作数不是复合型对象,则将返回错误。

new:根据构造函数创建一个新的对象,并初始化该对象。例如:

function Person(name, age) {    this.name = name;    this.age = age;}Person.prototype = {    constructor: Person,    sayName: function() {        console.log(this.name);    }}var person1 = new Person("Nicholas", 29);var person2 = new Person("Greg", 27);person1.sayName();  //  Nicholasperson2.sayName();  //  Gregperson1.sayName === person2.sayName; // true

上述代码组合使用构造函数模式和原型模式创建对象。

delete:删除指定对象的属性,数组元素或变量,例如:

var a = {  //定义对象a    x : 1,  //定义对象成员    y : 2  //定义对象成员};console.log(a.x);  //调用对象成员,返回1console.log(delete a.x);  //删除对象成员x成功,返回trueconsole.log(a.x);  //返回undefined,没有找到该对象成员

. 及 [ ]:存取对象和数组元素,一句话就是,js访问对象点和中括号,访问数组的话就是中括号,例如:

for-in遍历对象:

for(var x in obj){              console.log(x);        //输出obj中的属性名,方法名  console.log(obj.x);//想要用.的方法输出对应的属性和方法    结果是undefined,原因在于JS语言中.方法可以用来声明,声明对象属性的方式就是属性名.属性值  //这里实际先声明了obj的x属性,并且未初始化该属性,然后输出了该属性值,所以为undefined}

用[]方式只能访问和读取,不会定义新的属性:

for(var x in obj){              console.log(x);        //输出obj中的属性名,方法名  console.log(obj[x]);//输出对应的属性值和方法,方法未调用所以输出的是方法的代码}

( ) :函数调用,改变运算运算符优先级等,例如:

z = 78 * (96 + 3 + 45)

在该表达式中有五个运算符: =, *, (), +, 以及另一个 +。根据运算符优先级的规则,它们将按下面的顺序求值: (), +, +, *, =。


#JavaScript WEB前端开发#

说到这里,本篇的关系运算符和对象的运算符我们就讲到这里了,下期我们再讲逻辑运算符位运算符

想了解更多的前端技术,关注我,持续为您输出干货,谢谢!

你可能感兴趣的:(算数运算符与关系运算符)