上一篇文章呢,我们讲述了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)
在该表达式中有五个运算符:=,*,(),+,以及另一个+。根据运算符优先级的规则,它们将按下面的顺序求值:(),+,+,*,=。
说到这里,本篇的关系运算符和对象的运算符我们就讲到这里了,下期我们再讲逻辑运算符和位运算符。
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。