js高级程序设计第三版笔记--操作符01

一元操作符

只能操作一个值的操作符叫做一元操作符

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表示负数;这个表示符号的位叫做符号位

正数以纯二进制格式存储

负数同样以二进制码存储,但使用的格式是二进制补码。计算一个数值的二进制补码需要啊以下三个步骤:

  1. 求这个数值绝对值的二进制码(例如,要求-18的二进制补码,先求18的二进制码)
  2. 求二进制反码,即将0替换为1,将1替换为0
  3. 得到的二进制反码加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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值