上一篇文章呢,我们讲述了JavaScript运算符中的算术运算符和自增与自减,那么紧接上一篇的文章我们今天来说说关系运算符。
同样的关系运算符也是在平常用的很多,分为大小关系检测,等值关系检测。
大小关系检测就是说比大小,与我们数学中的比较丝毫不差,
等值关系检测呢,就有点区别了,分为相等比较和相同比较。
用于进行比较的运算符称作为关系运算符
1、大小关系检测
用于大小关系检测的运算符有:小于()、小于等于(<=)、大于等于(>=)
例如:
var box=3 < 2; //efalsevar box=3 >= 3; //falsevar box= '3' > 22; //falsevar box= '3' > '22'; //true
比较规则:
例如:
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,值和类型都相等了
比较规则:
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
注意:
== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。
而
=== 和 !== 只有在相同类型下,才会比较其值。(值和类型都相同的情况下比较)
==, 两边值类型不同的时候,要先进行类型转换,再比较。
===,不做类型转换,类型不同的一定不等。
比较规则:
对象操作运算主要是针对对象、数组、函数这 3 类复合型对象执行某种程序,设计的运算符包括 in、instanceof、new、delete,额外还包含 . 及 [] 和 ()。
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前端开发#
说到这里,本篇的关系运算符和对象的运算符我们就讲到这里了,下期我们再讲逻辑运算符和位运算符。
想了解更多的前端技术,关注我,持续为您输出干货,谢谢!