系列
JavaScript教程
值类型及变量
计算机以及如今已经普及的智能手机,很重要的一项功能就是处理和显示信息。例如,在某在线购物网站上,当你想查询你上个月的网购订单,点了查询按钮之后,这时计算机就从某个地方获取到你的订单信息,过滤掉非上个月的信息,然后把相关的内容显示在网页上。
在计算机程序中,各种不同的信息,就是不同的数据。那么既然这些数据反映的是真实的世界,那么数据也就必须有相应的类型来表示这个世界。
数值(Number)
数值,数值,数数嘛,谁不会?
学过C语言的同学,会发现C语言里的数值很麻烦,比如短整型(short)、整型(int)、长整型(long)、单精度浮点(float)、双精度浮点(double)、有符号、无符号等等,不努力学,还真不一定会数数。
JavaScript里面的数值类型比较直观,也比较简单,就是整数和小数(浮点数)。
整数
比如12、365、-3等都是整数,整数可正可负。
在JavaScript中,整数的取值范围很大:-2^53~2^53 (即正负2的53次方)。
小数(浮点数)
比如1.23、-3.4等,小数也可正可负,取值范围也很大。
简而言之,除非编写用于科学计算的应用程序,否则不用关心JavaScript中数字的取值范围的问题。另外,尽管在存储时,可以区别对待整数和浮点数,但实际上,JavaScript把它们都视作浮点数,这一点JavaScript隐藏了其中转换的细节,通常我们可以不用考虑这个问题。
算术运算 (加、减、乘、除)
数值类型,最基础的加(**+**
)、减(**-**
)、乘(*****
)、除(**/**
)例子:
console.log(5 + 3);
console.log(5.0 + 3);
console.log(5 - 3);
console.log(5.0 - 3);
console.log(5 * 3);
console.log(5.0 * 3);
console.log(5 / 3);
console.log(5.0 / 3);
有其他语言编程经验的同学,可能会留意到一点是小数运算和整数运算的结果是完全一样的,这也验证了,JavaScript其实内部都是当作浮点数来处理的。
换一个不同的语言来对比,下面是Python的例子:
print(5 + 3)
print(5.0 + 3)
print(5 - 3)
print(5.0 - 3)
print(5 * 3)
print(5.0 * 3)
print(5 / 3)
print(5.0 / 3)
可以看出,在Python里,整数和小数是不同的类型,整数做除法的时候,是有精度损失的。在运算的时候,Python要考虑得到的结果是整数还是小数,而JavaScript是不需要考虑的,
算术运算(求余)
求余操作,即当不能整除的时候,得到余数:运算符是**%**
console.log(5 % 3);
console.log(3 % 5);
console.log(3.3 % 5);
console.log(-3 % 5);
算术运算(自加、自减)
对一个数值进行加1或减1,最简单的方法是用累加(**++**
)和递减(**--**
)运算符。
// 先预先定义一个变量value
let value = 1;
console.log("----------累加----------");
value++;
console.log(value);
// 把value的值重置为1
value = 1;
console.log("----------递减----------");
value--;
console.log(value);
++
和--
可以放在变量前,也可以放在变量后,都是对当前变量的值加1。修改一下上面的例子,请留意一下放前面和后面的区别:
let value = 1;
console.log(value++);
console.log(value);
value = 1;
console.log(++value);
console.log(value);
console.log(value++)
是先输出value的值,然后value的值再自增1;console.log(++value)
是value先自增1,然后再输出value最新的值。
位运算
同其他语言一样,JavaScript也支持位运算操作。
按位非 **~**
: 每个二进制位都反转一下,0变1,1变0
/*
为了简化问题,仅用必要的位数来表示,没有表示符号位:
1的二进制是0001
2的二进制是0010
5的二进制是0101
*/
console.log(~5); // 0101每位都反转一下,是1010即6,最高为符号位也要反转,所以是-6
按位与 **&**
: 相同位都是1结果是1,否则都是0
// 按位与:相同位都是1结果是1,否则都是0
console.log(1 & 5); // 0001 & 0101 = 0001,即1
console.log(2 & 5); // 0010 & 0101 = 0000,即0
以下的运算不太常用,为了避免大家头大,了解即可。
按位或 **|**
:相同位只要有一个是1结果是1,否则是0
console.log(1 | 5); // 0001 | 0101 = 0101,即5
console.log(2 | 5); // 0010 | 0101 = 0111,即7
按位异或 **^**
: 相同位不同结果是1,相同则是0
console.log(1^5); // 0001 ^ 0101 = 0100,即4
console.log(2^5); // 0010 ^ 0101 = 0111,即7
按位左移 **<<**
console.log(5 << 2); // 0101 往左边移两位,右边补两个0,是010100,即20
按位右移 **>>**
console.log(5 >> 2); // 0101 往右边移两位,左边补两个0,是0001,即1
无符号右移 **>>>**
console.log(5 >>> 2); // 正数与有符号右移一样
console.log(-1 >>> 2);