4.9 关系表达式
关系运算符用于测试两个值之间的关系,根据关系是否存在返回true和false
4.9.1 相等和不等运算符
"=" -- "得到或者赋值"
"==" -- “相等”,检测两个数是否相等,“相等定义非常宽松,可以允许进行类型转换” 求反 !=
"===" - -- “恒等”,检测两个操作数是否严格相等 求反 !==
JavaScript对象的比较是引用过的比较,不是值的比较。
"===" 首先计算其操作数的值,然后比较这两个值,比较过程没有类型的转换
“==”比较并不严格,如果操作数不是同一类型,那么相等运算符会尝试进行一些类型转换:
|
4.9.2 比较运算符
比较运算符用来检测两个操作数的大小关系(数值大小或者字母表的顺序)
比较操作符的操作数可以是任意类型,但是只有数字和字符串才能真正执行比较操作,那些不是字符串和数字的操作数都将进行类型转换,规则如下:
*JavaScript字符串是一个由16位整数值组成的序列,字符串的比较也只是两个字符串中的字符的数值比较。字符串比较是区分大小写的,所有的大写的ASCII字母都“小于”小写的ASCII字母。
参照String.localCompare()方法获取更多字符串比较信息,String.localCompare方法更加健壮可靠,这个方法参照本地语言的字母表定义的字符顺序。对那些不区分字母大小写的来说,则需要首先将字符串全部转换为小写字母或者大写字母,String.toLowerCase().String.toUpperCase.
*对于数字和字符串来说,+ 和 比较运算符不同,+ 偏爱字符串,只要有一个操作数是字符串,进行字符串的连接;比较运算符偏爱数字,只有在两个操作数都是字符串的时候,才会进行字符串的比较。
* “<=” 和 “>=”运算符在判断相等的时候,并不依赖于相等运算符和严格相等运算符的比较法规则,只是简单的“不大于”和“不小于”。只有一个例外,当其中一个操作数(或者转换之后)是NaN的时候,所有四个比较运算符均返回false。
|
4.9.3 in运算符
in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数的属性名,那么表达式返回true.
var point ={x:1,y:2};
"x" in point //true:对象有一个x的属性
"z" in point //false:对象没用此属性
"toString" in point // true:对象继承该方法
"valueOf" in point //true:对象继承该方法
var data = [7,8,9];
"0" in data //true:包含索引"0"
1 in data //true:转换为字符串,包含该索引数字
7 in data //false:不包含该索引
*注意:对象是属性名 ,数组是索引名
|
4.9.4 instanceof运算符
instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false。
var d = new Date();
d instanceof Date; //true:d是Date的实例
d instanceof Object; //true:所有对象都是Object实例
d instanceof Number; //false
所有对象都是Object的实例。当通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对父类的检测。如果instanceof的左操作数不是对象的话,返回false;右操作数不是函数,抛出一个类型错误异常。
|