《JavaScript高级程序设计》读书笔记--2-操作符

本文详细介绍了JavaScript中的操作符,包括一元操作符的递增递减,位操作符的按位非、按位与、按位或、按位异或以及左右移位,还有布尔操作的逻辑非、逻辑与、逻辑或,以及它们的运算规则和特点。通过实例解析了操作符在不同类型数据上的应用和转换效果。
摘要由CSDN通过智能技术生成

操作符

一元操作符

递增递减操作
后置

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;//等于22
var num4 = num1 + num2;//等于21

前置

var num1 = 2;
var num2 = 20;
var num3 = --num + num2;//等于21
var num4 = num1 + num2;//等于21

也可以适用于字符串、布尔值、浮点数值和对象,如:

var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function(){
        return -1;
    }
};

s1++;//值变成数值3
s2++;//值变成NaN
b++;//值变成数值1
f--;//值变成0.10000000000000009(由于浮点舍入错误所致)
o--;//值变成数值-2

一元加减操作符
一元加操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响,不过在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
一元减操作符应用于数值时,该值会变负数,而当应用于非数值时,与一元加操作符一样,最后将得到的数值转换为负数。
主要用于基本的算术运算,也可以用于转换数据类型。

位操作符

位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。实际上数值是按照64位格式存储,但是位操作符并不是直接操作64位的值,而是先将64位的值转为32位的整数,然后执行操作,最后再将结果转回64位。
有符号的整数,32位中的前31位用于表示整数的值,第32位(符号位)表示数值的符号:0表示正数,1表示负数。
负数的二进制存储过程

  1. 求这个数值绝对值的二进制码(例如要求-18的二进制补码,先求18的二进制码);
  2. 求二进制反码,即将0替换为1,1替换为0;
  3. 得到二进制反码加1。
var num = -18;
alert(num.toString(2));//"-10010"

按位非(NOT)
按位非操作符由一个波浪线(~)表示,返回数值的反码。

var num1 = 25;   //二进制:00000000000000000000000000011001
var num2 = ~num1;//二进制:11111111111111111111111111100110
alert(num2);//"-26"
var num3 = -num1 - 1;
alert(num3);//"-26"

对25执行按位非操作,结果为-26,验证了其本质:操作数的负值减1。
虽然num2和num3都得到了-26,但是按位非是在数值表示的最底层执行操作,因此速度更快。

按位与(AND)
按位与操作符由一个和号字符(&)表示,有两个操作符数。
按位与

按位或(OR)
由一个竖线符号(|)表示,有两个操作数。
按位或

按位异或(XOR)
由一个插入符号(^)表示,有两个操作数。
按位异或

左移
由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。

var oldValue = 2;//二进制位10
var newValue = oldValue << 5;//等于二进制的1000000,十进制位64

注意,向左移位后,原数值右侧多出了5个空位,左移操作会以0来填充这些空位,以便得到的结果是一个完整的32位二进制数。
左移
左移不会影响操作数的符号位,如将-2向左移动5位,结果将是-64,而不是64.

有符号的右移
由两个大于号(>>)表示,会将数值向右移动,但是保留符号位。其操作与左移操作恰好相反。

var oldValue = 64;//二进制位1000000
var newValue = oldValue >> 5;//等于二进制的10,十进制位2

对原数值中出现的空位,将以符号位的值来填充,空位出现在原数值的左侧符号位的右侧。
有符号的右移

无符号右移
由3个大于号(>>>)表示,将数值的所有32位都向右移动。对于正数来说无符号右移和有符号右移的结果相同,但是对于负数来说将有很大不同。

  1. 无符号右移都是以0来填充空位;
  2. 无符号右移会把负数的二进制码当成正数的二进制码。
var oldValue = -64;//二进制:11111111111111111111111111000000
var newValue = oldValue >>> 5;
//二进制:00000111111111111111111111111110 十进制134217726

布尔操作

逻辑非(!)
无论值为什么类型,这个操作符都回返回一个布尔值。
如果操作数是一个对象,返回false。

alert(!false);//true
alert(!"blue");//false
alert(!0);//true
alert(!NaN);//true
alert(!"");//true
alert(!12345);//false

逻辑与(&&)

var result = true && false;

逻辑与
注意:

  • 若第一个操作数是对象,返回第二个操作数;
  • 若第二个操作数是对象,则只有在第一个操作数的值为true时才会返回该对象;
  • 若两个操作数都是对象,返回第二个操作数;
  • 若有一个操作数是null,则返回null;
  • 若有一个操作数是undefined,则返回undefined。

逻辑与是短路操作符,如果第一个操作符为false,则不会对第二个操作符进行求值。

逻辑或(||)
逻辑或
注意:
- 若第一个操作数是对象,则返回第一个操作数;
- 若第一个操作数的求职结果为false,则返回第二个操作数;
- 若两个操作数都是对象,则返回第一个操作数;
- 若两个操作数都是null,则返回null;
- 若两个操作数都是NaN,则返回NaN;
- 若两个操作数都是undefined,则返回undefined。

逻辑或也是短路操作符,如果第一个操作符为true,则不会对第二个操作符进行求值。

乘性操作符(乘法(*)、除法(/)、求模(%))
加性操作符(加法(+)、减法(-))
关系操作符(小于(<)、大于(>)、小于等于(<=)、大于等于(>=))
相等操作符(相等(==)、不相等(!=)、全等(===)、不全等(!==))
相等操作符
条件操作符

var max = (num1 > num2) ? num1 : num2;

赋值操作符(=)
逗号操作符(,)

var num = (1,2,3,4,5);//num的值为5,返回表达式的最后一项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值