Javascript核心读书有感之表达式和运算符(6)


            1 + 2 + "bmice" //=> "3 bmice"
            1 + (2 + "bmice") => "12bmice"

ii.一元运算符

一元运算符作用于一个单独的操作数。并产生一个新值。在javascript中,一元运算符具有很高的优先级,而且都是右结合。本节讲述一元运算符(+,-,++和--),必要时,他们将操作转换为数字。需要注意的的是+ -是一元运算符,也是二元运算符、

一元加法+

一元加法运算符把操作数数转换为数字(或者NaN),并且返回这个转换后的数字。如果操作数本身就是数字,则直接返回这个数字。

一元减法-

当-号做一元运算符时,它会根据需要把操作数转换为数字,然后改变运算结果的符号、

递增++

递增“++”运算符对其操作数进行增量(+1)的操作,操作数一个左值(变量、数组元素或者对象属性)。运算符将操作数转换为数字。然后给数字加1、并将加1后的数值重新赋值给变量、数组元素或者对象属性。

递增++ 运算返回值依赖它对操作数的位置。

当操作符在操作数数之前,称为“前增量”(pre-increment)运算符,它对操作数进行增量计算,并返回计算后的值。

当操作符在操作数之后,称为"后增量"(post-increment)运算符,它对操作数进行增量计算,但返回为做增量计算的(unincremented)值。如

var i = 1,j = ++i //i和j的值都是2
            var i = 1,j = i++; //i是2,j是1
需要注意的是,便打算++x并总和x=x+1完全一样,“++”运算符从不进行字符串连接操作,它总会将操作数转换为数字并增1.如果x是字符串“1”,++x的结果就是数字2,而x+1是字符串"11"

递减和递增的操作方式是同样的,它把操作数转换为数组,然后减1.

iii.位运算符

位运算符可以对数字表示的二进制数据进行更低层级的按位运算。尽管它们不是传统的纯数学运算,但这里也归类为算术运算符,因为他们作用于数值类型的操作并返回数字。这些运算符在javascript不常见。(此处不描述,详情自行百度~-~)           

9.关系表达式

本节讲述javascript的关系运算符,关系运算符用于测试两个值之间中的关系(相等、小于或“是...的属性”),根据关系是否存在而返回true和false.关系表达式总是返回一个布尔值,通常在if while或者for语句(第五章)中使用关系表达式,以控制程序的执行流程。

接下来几节会讲述相等和不等运算、比较运算符和javascript中其它两个关系符in和instanceof

i相等和不等运算符

“==”和"==="运算符用于比较两个值是否相等,两个运算符允许任意类型的操作符。如果相等则返回true,否则返回false.“===”也称为严格相等运算符(有时称为恒等运算符),它用于检测两个操作数是否严格相等。“==”运算符称作相等运算符,它用来检测两个操作数是否相等,这里的相等定义宽松,可以允许进行类型转换。

javascript支持“=”,“==”,“===”运算符,你应当理解(赋值,相等,恒等)运算符之间的区别。并在编程中小心使用。为了减少混淆,应该把“=”称作“得到或赋值”,把“==”称作“相等”,把“===”称作“严格相等”。

“!=”和“!==”运算符规则是“==”,“===”运算符的求反,“!”是布尔非运算符,我们将“!=”,“!==”称为不相等,不严格相等

javascript对象的比较是引用的比较,而不是值的比较。对象和本身是相等的,但和人和对象都不相等。如果两个对象具有相同数量的属性,相同的属性名和值,它们依然是不相等的。相应位置的数组元素是相等的两个数组也是不相等的。

严格相等运算符"==="首先计算操作数的值,然后比较这两个值,比较过程没有任何类型转换。

如果两个值类型不想同,则它们不相等
如果两个值都是null或者undefined,则它们不相等
如果两个值都是布尔值true或者false, 则它们相等
如果其中一个值是NaN,或者两个值都是NaN ,则它们不相等,NaN和其它值都是不相等的,包括它本身。
如果两个值为数字且相等,则它们相等。如果一个值为0,令一个值为-0,则它们同样相等。
如果两个值为字符串,并且所含对应位上的16位数(参照3章2节)完全相等,则它们相等。如果他们的长度或内容不同,则不相等。两个字符串可能函数完全一样并且所显示出的字符也一样,但具有不用编码的16位值,javascript并不对Unicode进行标准转换,因此这样的字符串通过"==="和"=="运算符的比较结果也不相等。第三部分的String.localeCompare()提供了另外一种比较字符串的方法。
如果两个引用值指向同一个对象,数组或函数,则它们是相等的。如果指向不同的对象,则它们是不等的,尽管两个对象有完全相同的属性。
相等运算符"=="和恒等运算符相似,但相等运算符比较并不严格。如果两个数不是同一类型,那么相等运算符会尝试进行一些类型转换,然后进行比较。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgffgj.html