一元操作符
只能操作一个值的操作符叫做一元操作符
1.递增和递减操作符
前置递增和递减:
var age=29;
++age;
以上为前置递增,在这个例子中前置递增操作符把age的值变成了30(为29加上了1)。实际上,执行这个前置递增操作与执行以下操作的效果相同:
var age=29;
age=age+1;
执行前置递减操作方法也类似,结果会从一个数值中减去1
总结:执行前置递增和递减操作符时,变量的值都是在语句被求值以前改变的,即先对变量进行自增或自减操作后,再执行语句
var age=29;
var anotherage=--age +2;
alert(age); //28
alert(anotherage); //30
这个例子中变量anotherage的初始值等于变量age的值先在29的基础上减去1后,再加2。
由于先执行了减法操作,age的值变为了28,然后再执行alert,所以最终alert(age);的结果为28
后置递增和递减:
var num1=2;
var num2=20;
var num3=num1-- +num2; //22
var num4=num1+num2; //21
num3的初始化值为num1的值加上num2的值,这里执行完毕后,num1的值自减1 ,变为num1=1
num4的初始化值为num1进行自减1操作后的值num1=1,加上num2的值
总结:后置自增和自减,是在语句执行完毕之后对变量进行自增或自减操作,即先将变量原始的值带入表达式进行计算,之后再对变量的值进行自增或自减
在应用于不同的值时,递增和递减操作符遵循以下规则
- 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变为数值变量
- 在应用于一个不包含有效数字字符的字符串时,将变量值设置为NAN,字符串变量变为数值变量
- 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量
- 在应用于布尔值为true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量
- 在应用于浮点数值时,执行加减1的操作
- 在应用于对象时,先调用对象的valueOf()方法,已取得一个可供操作的值。然后对改值应用前述规则。如果结果是NAN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量
var s1="2" s1++; //值变成数值3
var s2="x" s2++; //值变成NAN
var b=false; b++; //值变成数值1
var f=1.1 f--; //值变成0.100000000000000009
var o={
valueOf:function(){
return -1;
}
}
o--; //值变成数值2
2.一元加和减操作符
一元(+)操作符以一个+号表示,放在数值前面,对数值不会产生任何影响
var num=25;
num = +num; //任然是25
对不同数据类型用运一元加操作符的结果
var s1="01" s1= +s1; //值变成数值1
var s2="1.1" s2= +s2; //值变成数值1.1
var s3="z" s3= +s3; //值变成NaN
var b=false; s4= +s4; //值变成数值0
var f= 1.1; s5= +s5; //值未变,任然是1.1
var o={
valueOf:function(){
return -1;
}
}
o= +0; //值变成数值-1
一元减操作符主要用于表示负数,而当应用于非数值时,一元操作符遵循与一元加操作符相同的规则。
3.位操作符
位操作符并不直接操作64位的值。而是先将64位的值转换为32位的整数,然后执行操作,最后再将结果转换回64位
对于有符号的整数,32位中的前31位用于表示整数的值。第32位用于表示数值的符号:0表示整数;1表示负数;这个表示符号的位叫做符号位
正数以纯二进制格式存储
负数同样以二进制码存储,但使用的格式是二进制补码。计算一个数值的二进制补码需要啊以下三个步骤:
- 求这个数值绝对值的二进制码(例如,要求-18的二进制补码,先求18的二进制码)
- 求二进制反码,即将0替换为1,将1替换为0
- 得到的二进制反码加1
0000 0000 0000 0000 0000 0000 0001 0010 //18的二进制码
1111 1111 1111 1111 1111 1111 1110 1101 //18的二进制反码
1111 1111 1111 1111 1111 1111 1110 1101
1 //反码加1
1111 1111 1111 1111 1111 1111 1110 1110 //-18的二进制码
按位非:执行按位非的结果就是返回数值的反码
按位与:将两个数值的每一位对齐,在两个数值的对应都是1时才返回1,任何一位是0,结果都是0
按位或:在有一个位是1的情况下就返回1,在两个位都是0的情况下才返回0
按位异或:对应位上只有一个1时才返回1,如果对应的两位都是1或都是0,则返回0