第二遍犀牛书——表达式与运算符
暑假在家一阵一阵没有动力干事情,归根结底就是懒。
好了废话不多说我们来说说第二遍看犀牛书——表达式与运算符的内容。
变量初始化
|
|
注意这两者的区别,虽然这两者如果在全局的上下文中都是创建的全局变量,但是第二种可以用delete删除,而第一种不可以,所以第二宗更像创建了windows的一个属性。
算数优先级
以前从来没有注意过,a=1+1,以前看这种赋值表达式一般直接认为a=2,却从来没想过为什么,原来是运算符的优先级问题,=号(赋值)的优先级往往是最低的。
运算顺序:
因为一元操作符、赋值和三元条件运算符都具有从右至左的结合性。
但是无论是设呢么运算符表达式都是从左到右计算的,(个人猜测跟编译有关)1b=(a++)+a;//这里就会反应上述的容易忽视的一点
null12342+null=2;//null被转化为10==null;//false0<=null;//true0>=null;//true
上面代码不是耍人吗。。。其实不然,在==中null被转化为undefined而不是对数字对待,而在<=或者=>中都是当做数字对待。
++
虽然x++;跟x+1差不多相同,但是在某些细微的上有不同,如果x为字符串’1’,x++得到2,而x+1得到11.
位操作
想起来一个不产生新的变量交换两个值。12345678a=a^b;b=a^b;a=a^b;ora=a+b;b=a-b;a=a-b;
其实两者的大体的思路是一样的,只是第一种位操作在某种程度上快一点(但是通过代码实测数量级到达亿级差距都不是很大)
所有的ascii大写字母都小于小写字母
eval
代码中尽量不要出现。
