Contents
  1. 1. 变量初始化
  2. 2. 算数优先级
  3. 3. 位操作
  4. 4. eval

暑假在家一阵一阵没有动力干事情,归根结底就是懒。
好了废话不多说我们来说说第二遍看犀牛书——表达式与运算符的内容。

变量初始化

1
2
3
4
5
var a=1;
delete a;//false
t=1;
delete t;//true

注意这两者的区别,虽然这两者如果在全局的上下文中都是创建的全局变量,但是第二种可以用delete删除,而第一种不可以,所以第二宗更像创建了windows的一个属性。

算数优先级

以前从来没有注意过,a=1+1,以前看这种赋值表达式一般直接认为a=2,却从来没想过为什么,原来是运算符的优先级问题,=号(赋值)的优先级往往是最低的。

运算顺序:

因为一元操作符、赋值和三元条件运算符都具有从右至左的结合性。

但是无论是设呢么运算符表达式都是从左到右计算的,(个人猜测跟编译有关)

1
b=(a++)+a;//这里就会反应上述的容易忽视的一点

null

1
2
3
4
2+null=2;//null被转化为1
0==null;//false
0<=null;//true
0>=null;//true

上面代码不是耍人吗。。。其实不然,在==中null被转化为undefined而不是对数字对待,而在<=或者=>中都是当做数字对待。

++
虽然x++;跟x+1差不多相同,但是在某些细微的上有不同,如果x为字符串’1’,x++得到2,而x+1得到11.

位操作

想起来一个不产生新的变量交换两个值。

1
2
3
4
5
6
7
8
a=a^b;
b=a^b;
a=a^b;
or
a=a+b;
b=a-b;
a=a-b;

其实两者的大体的思路是一样的,只是第一种位操作在某种程度上快一点(但是通过代码实测数量级到达亿级差距都不是很大)

所有的ascii大写字母都小于小写字母

eval

代码中尽量不要出现。

Contents
  1. 1. 变量初始化
  2. 2. 算数优先级
  3. 3. 位操作
  4. 4. eval