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

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

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

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

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

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

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

1、大小关系检测

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

:如果A小于B,则返回值为true,否则返回值为false

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

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

:如果A大于B,则返回值为true,否则返回值为false

例如:

varbox=32;//efalsevarbox=3=3;//falsevarbox='3'22;//falsevarbox='3''22';//true

比较规则:

数值与数值比较,比较的是它们的代数值。

仅一个运算符是数值,将另一个运算数转化成数值,然后比较它们的代数值。

字符串之间的比较,将运算数转化成字符串并进行比较。

运算数即非数字也非字符串,转化成字符串或数值进行比较。

运算数无法被转化成数值或字符串,返回值为false。

与NaN的比较,返回值为false。

例如:

varbox=32;//truevarbox=322;//falsevarbox='3'22;//falsevarbox='3''22';//truevarbox='a''b';//falsea=97,b=98varbox='a''B';//trueB=66varbox=1对象;//false,如果有toString()或valueOf()则返回1返回数的值

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

2、等值关系检测

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

1、相等比较

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

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

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

例如:

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

比较规则:

一个操作数是布尔值,则比较之前将其转换为数值,false转成0,true转成1

一个操作数是字符串,则比较之前将其转成为数值再比较

一个操作数是对象,则先调用valueOf()或toString()方法后再和返回值比较

不需要任何转换的情况下,null和undefined是相等的

一个操作数是NaN,则==返回false,!=返回true;并且NaN和自身不等

两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返回true,否则返回false

在全等和全不等的判断上,比如值和类型都相等,才返回true,否则返回false

2、相同比较

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

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

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

例如:

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

注意:

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

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

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

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

比较规则:

值类型间比较,只有数据类型相同,且数值相等时才能够想同

值类型与引用类型比较,肯定不相同

引用类型间比较,比较他们的引用值

对象运算符

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

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

varo={//定义对象a:1,//定义属性ab:function(){}//定义方法b}("a"ino);//返回("b"ino);//返回("c"ino);//返回("valueOf"ino);//返回true,继承Object的原型方法("constructor"ino);//返回true,继承Object的原型属性

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

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

vara=newArray();//定义数组(ainstanceofArray);//返回(ainstanceofObject);//返回true,Array是Object的子类(ainstanceofFunction);//返回false

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

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

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

functionPerson(name,age){=name;=age;}={constructor:Person,sayName:function(){();}}varperson1=newPerson("Nicholas",29);varperson2=newPerson("Greg",27);();//();//===;//true

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

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

vara={//定义对象ax:1,//定义对象成员y:2//定义对象成员};();//调用对象成员,返回1();//删除对象成员x成功,返回();//返回undefined,没有找到该对象成员

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

for-in遍历对象:

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

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

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

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

z=78*(96+3+45)

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

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

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐