导读:其实看到这个运算符的学习,很有一种熟悉感,因为在总体看来,和之前的C++有很多类似的地方,但当时觉得简单,没有总结。所以,这次一定得总结了。其实,知识的罗列,基础的积累,在学习中也很重要。
一、总体图示
1.1,图示
1.2,说明
运算符从大体上,分为了8种。而其中重点介绍的有:算术、关系、逻辑运算符。而在首先也展示了由运算符而组合的表达式,算是运算符的应用,而后介绍的优先级,则算是对于运算符操作的一种规范。
1.2.1,一元运算符扩展
数值字符串型:var box='89';box++ 说明:90,自动转换成数值字符串:var box='ab';box++ 说明:NaN,字符串包含非数值转换成NaN
布尔值:var box=false;box++ 说明:1,false转换成值是0,累加就是1
浮点型:var box=2.3;box++ 说明:3.3,直接加1
对象型:var box={toString:function(){return 1;}};box++ 说明:1,不设置toString()或valueOf即为NaN(结合到数据类型转换去看)
1.2.2,位运算符扩展
分为7种,分别是:位非NOT(~)、位与AND(&)、位或OR(|)、位异或(^)、左移(<<)、有符号右移(>>),无符号右移(>>>)位运算符基于底层,性能和速度非常好,但也正是由于其基于底层,所以使用的难度也较大。
更多关于位运算符的知识:https://msdn.microsoft.com/library/066h456z
1.2.3,逗号运算符扩展
var box=100,age=20,height=178; 说明:多个变量声明var box=(1,2,3,4,5); 说明:5,变量声明,将最后一个值赋给变量。(不常用)
var box=[1,2,3,4,5] 说明:[1,2,3,4,5],数组的字面量声明
var box={1:2,3:4,5:6} 说明:[Object Object],对象的字面量声明
1.2.4,优先级扩展
一般情况,我们使用圆括号进行优先级的设置,比如在数据类型转换中执行加运算符,var box=“年龄是:”+10+20;alert(box),那么执行的结果是:年龄是:1020。但如果使用圆括号进行优先级设定:var box=“年龄是:”+(10+20);alert(box),那么执行的结果就是:年龄是:30。
另外,不使用圆括号进行优先级设定的运算规则是:
二、分解说明
2.1,算术运算符
2.2,关系运算符
2.2.1,图形补充
关系运算符除了包括小于,大于,小于等于,大于等于之外,还包括:相等==,不等!=,全等(恒等)===,不全等!==
2.3,逻辑运算符
2.3.1,图形补充
逻辑与运算符属于短路操作,如果第一个操作数返回false,第二个数不管是false或是true,都返回false。同理,逻辑或运算符也属于短路操作,当第一操作数的求值结果为true,就不会对第二个操作数求值,利用这一特性,避免变量赋null或Undefined值。
逻辑非:使用一次逻辑非运算符,其流程是先转成布尔值,后取反。而使用两次逻辑非运算符就是将值转换成布尔值取反再取反,其操作相当于对值进行Boolean()转型函数处理。
注意:使用三个以上的逻辑非运算符,没有错误,但没有其实际意义
三、学习总结
这部分知识,本来在学习C的时候就应该总结的。这次总结,发现基础真的很重要,有时候就是那么一小点,就可以决定整个成败。就比如说一元运算符中对象型,要是之前没有总结数据类型,也不能理解这么快(主要是对象数据转换的内部机制,其首先通过ValueOf()函数,判断对象类型是否为数值,当返回值=NaN时,则继续调用其toString()函数,继续判断)再一个简单的就是var box=“年龄是:”+10+20;alert(box)和var box=“年龄是:”+(10+20);alert(box),这个在理解的时候很精准,都得益于之前的数据类型的总结。
基础知识的罗列,看起来毫无意义和繁杂,但就是那一遍哪怕是抄的过程,都带给了我很多财富。