Loading...

JavaScript操作符

发布者 milleros - 5 个月前

1. 一元操作符

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

1.1 递增和递减操作符

递增和递减操作符一般是连用两个一元操作符来完成操作。递增和递减操作符又分为前置递增/递减后置递增/递减

1.1.1 前置递增/递减

var age = 22;
console.log(--age); //21

1.1.2 后置递增/递减

var age = 22;
console.log(age--); //21

1.1.3 在运算中运用递增或递减运算符

在实际的等式运算中对变量可以进行任意的一元运算,但是对于实际数值使用运算则可能会出错。

var num1 = 4;
console.log(num1-- + 1); //5
console.log(num1); // 3
console.log(--num1 + 1); //3

console.log(--4 + 1); // Uncaught ReferenceError: Invalid left-hand side expression in prefix operation
console.log(4-- + 1); // Uncaught ReferenceError: Invalid left-hand side expression in prefix operation
console.log(1 + 4--); // Uncaught ReferenceError: Invalid left-hand side expression in prefix operation

这里有两处地方值得我们注意,第一处是在代码的第二行和第四行处,为何前置和后置递减操作分别运算加一操作会得出两个不同的结果。 首先第二行后置递减,此处的运算使用的num1值是num1执行后置递减前的值。 然后第四行前置递减,此处的运算使用的num1值是num1执行第二行后置递减接着再执行第四行前置递减后的值。 第二处值得我们注意的是直接对数值进行递增或递减操作是会报错的。

1.2 运用一元操作符进行数值转换

我们除了可以在等式运算中使用一元运算符之外,还可以在JavaScript中对几乎任何值进行一元操作,不过在对非数值应用一元操作符时,该操作符会像Number()转型函数一样对这个值执行转换。 换句话说,布尔值false和true将被转换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象则是先调用他们的valueOf()和toString()方法,再转换得到的值。

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

s1 = + s1;     //数值1
s2 = + s2;     //数值1.1
s3 = +s3       //NaN
b = +b;        //数值0
f = +f;         //数值1.1
o = +o;        //数值-1

2. 位操作符

位操作符作用在最基本的二进制上,也就是内存中,此处的位指的就是内存中二进制各数值的位置得来的。ECMAScript中的所有数值都是以IEEE-754 64位格式存储,但操作符并不直接操作64位的值,而是先将64位转换成32位的整数,然后再执行操作。

对于有符号的整数,32位中的前31位用于表示整数的值,第32位用于表示数值的符号:0表示正数,1表示负数。这个标识符好的位叫做符号位,符号位的值军订了其他位数值的格式。

正数以纯二进制格式存储,31位中的每一位都表示2的幂。第一位(位0)表示2º,以此类推。32位中表示数值时,没有用到的位使用0填充。例如 18的二进制表示:00000000000000000000000000010010,或者简洁表示为10010。拥有五个有效位五位本身军订了实际的值。

1 0 0 1 0
2^4x1 2³x0 2²x0 2¹x0 2ºx0
16 0 0 2 0
合计 18

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

  1. 求这个数值绝对值的二进制码,例如-18,先求18的二进制码。
  2. 求二进制反码,也就是将0替换为1,将1替换为0。
  3. 得到的二进制反码加1。

根据三个步骤求-18的二进制码: 0000 0000 0000 0000 0000 0000 0001 0010 求二进制反码,0与1互换 1111 1111 1111 1111 1111 1111 1110 1101 二进制反码加1 1111 1111 1111 1111 1111 1111 1110 1110

此时便就得到了二进制表示的-18。

但是在我们在JavaScript中计算二进制的时候,负数的二进制并不是如实显示上述的计算结果,例如-18的二进制在JavaScript中显示的是:

var num = -18;
console.log(num.toString(2)); // "-10010",也就是直接在18的二进制码前面加上了负号。

标签纵览

SSH(1)Docker(1)Python(1)VueJS(1)Nodejs(2)Linux(5)前端(6)