您的位置:首页 > Web前端 > JavaScript

javascript基础之操作符

2017-03-20 00:18 218 查看

操作符

一元操作符

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

递增(++)、递减(--)操作符

递增、递减操作符有两种方式:前置和后置,前置就是操作符在变量前面,后置就是操作符在变量后面。如:++ a、-- b、a ++、b --。

前置操作
var a = 20;
++ a;
console.log(a); //21


等同于:
var a = 20;
a = a + 1;

console.log(a); //21


前置递减操作与递增操作类似。
var a = 20;
a --;

console.log(a); //19


等同于:
var a = 20;

a = a - 1;

console.log(a); /* 得到结果19 */


var a = 20,
b = 50;

console.log((++ a) + (++ b)); //72 = 21 + 51


后置操作

后置操作与前置操作有个最大不同是:递增和递减 是在
包含它们的语句被求值后 才执行的
。即:在包含它们的这条语句执行完所在操作后,才执行递增或递减操作的。

递增:
var a = 50,
b = 10;

//此时先执行所在语句的操作即a、b两个值相加,得到结果60,再执行递增操作,a、b各自加1。
var c = a++ + b++;
// 此时a的值为51,b的值为11,最后得到d的结果62
var d = a + b;

console.log(c); //60
console.log(a); //51
console.log(b); //11
console.log(d); //62


效果:



递减:
var a = 50,
b = 10;

//此时先执行所在语句的操作即a、b两个值相加,得到结果60,再执行递增操作,a、b各自减1。
var c = a-- + b--;
//此时a的值为49,b的值为9,最后得到d的结果58
var d = a + b;

console.log(c); //60
console.log(a); //49
console.log(b); //9


效果:



递增、递减操作符有以下规则:

1、运用于 包含有效数字字符的字符串时,先将其转换成数字值,再执行加减1操作,最后将字符串变量变成数字变量。

2、运用 不包含有效数字字符的字符串时,返回NaN,最后将字符串变量变成数字变量。

3、运用于布尔型的false时,先将其转换成0,再执行加减1操作,最后将布尔变量变成数字变量。

4、运用于布尔型的true时,先将其转换成1,再执行加减1操作,最后将布尔变量变成数字变量。

5、运用于浮点数字时,执行加减1操作。

6、运用对象时,先使用对象的valueof()方法或toString()方法,再执行加减1操作。

var a = "21"; //有效数字字符串
var b = "hello"; //无效数字字符串
var c = 1.1; //数字
var d = false; //false

a --;  /* 值变成20 */
b ++;  /* 值变成NaN */
c --;  /* 值变成0.1 */
d ++;	 /* 值变成1 */
console.log(b); //NaN
console.log(d); //1


一元加、减操作符

一元加、减操作符就是在变量前面加上一个"+"或"-",变量前面加"+",不会对值产生影响,加"-"是将值变成负值

对于非数值,首先就像Number()方法一样,先将非数值转换成数值,后在前面加上"+"或"-"。也就是说,如果是布尔值,则将true转换为1,false转换为0,如果是对象,则调用对象的toString()方法或valueof()方法。

格式: a = +a; b = -b;
var a = "21";
var b = "hello";
var c = 1.1;
var d = false;

a = +a;  /* 值变成20 */
b = -b;  /* 值变成NaN */
c = -c;  /* 值变成-1.1 */
d = +d;  /* 值变成0 */


位运算操作符

位操作是最底层的操作,javascript中的数值都是以64位存储的,但64位是透明的,所以是操作的32位数值,前31位是数值,第32位表示的符号位。

负数操作是在正数的基础上进行的,

1、求这个负数值绝对值的二进制码。
2、再求这个二进制码的反码(即:1变为0,0变为1)
3、最后在反码的基础上加1。

按位非(NOT)

按位非只有一个操作数,用波浪线(~)表示,机制:就是返回数值的反码,即:操作数的负值减1
var a = 40;
var b = ~a;

console.log(b); /* a的负值-40再减1得到-41 */


按位与(AND)

按位与有两个操作数,用和号&)表示,机制:两个二进制数,每一位对齐,对应位全是1返回1,有一个为0返回0。通俗说”全1为1,有0则0

010101
101101

结果就是:000101

按位或(OR)

按位或也有两个操作数,用竖线)表示,机制:两个二进制数,第一位对齐,对应位有一个是1返回1,全是0返回0。通俗说”有1则1,全0为0

100110
010100

结果就是:110110



按位异或(XOR)

按位异或有两个操作数,用(^)表示,机制:对应位相同的返回0,不相同的返回1,即:相异为1,相同为0

01110010
01011001

结果就是:00101011

左移(<<)

左移操作用(<<)表示,将二进制向左移动多少位。如:向左移动n位,得到的结果 相当于
该变量乘以2的n次方


var a = 2;

var b = a << 5;

表示的是将2的二进制数 10向左移动5位,不中的位用0补全,即得到:1000000,数值是64,相当于2乘以2的5次方。

有符号右移(>>)

有符号右移用(>>)表示,将二进制向右移动多少位,如:向右移动n位,得到的结果 相当于
该变量乘以2的-n次方


var b = 64;
var a = b >> 5;

表示的是将64的二进制数1000000值向右移动5们,即得到:10,数个2。相当于乘以2的-5次方。

布尔操作符

布尔操作符包括:逻辑非(NOT)、逻辑与(AND)、逻辑或(OR)

逻辑非(!)

逻辑非用感叹号(!)表示,非操作符只有一个操作数,首先将操作数转换成布尔值,再将其取反。

规则:

1、操作数是一个对象,返回false。
2、操作数是一个空字符,实则为false,返回true。
3、操作数是一个非空字符,返回false。
4、操作数是null,返回true。
5、操作数是undefiend,返回true。
6、操作数是NaN,返回true。

console.log(!true); //false
console.log(!false); //true
console.log(!""); //true
console.log(!undefined); //true
console.log(!NaN); //true


对于有两个逻辑非,首先将 操作数转换为布尔值,再将其取反。 也就是说第一个非运算将操作数转换成布尔值,第二个非运算再将其取反。

console.log(!!null); //返回false


逻辑与(&&)

逻辑与有两个操作数,它的规则如下:

1、如果第一个操作数是对象,返回第二个操作数。
2、如果第二个操作数是对象,在第一个操作数的求值结果是true的前提下,才会返回这个对象。
3、如果两个操作数均为对象,返回第一个操作数
4、如果第一个操作数是null,返回null。
5、如果第一个操作数是undefined,返回undefined。
6、如果第一个操作数是NaN,返回NaN。

逻辑与操作也称短路操作,即:当逻辑与 左边的结果为false时,逻辑与 右边的操作不行执行
var a = false;
var b = 3;
var c = a && b++; //a为false,b++不会执行,直接将a赋值给c

console.log(c); //false
console.log(b); //3


如上,因为a的结果是false,所以c的结果直接为false,逻辑与右边的操作不会执行,即b不会递增,还是为3.

逻辑或(||)

逻辑或 左边的结果为true时,逻辑或右边的操作不会执行。

规则如下:

1、如果第一个操作数是对象,返回第一个对象。
2、如果第一个操作数的结果为false,返回第二个操作数。
3,如果第一个操作数是NaN,返回NaN。

4、如果第一个操作数是null,返回null。
5、如果第一个操作数是undefined,返回undefined。
6,如果两个操作数是对象,返回第一个操作数。

var a = true;
var b = 3;
var c = a || b++; //第一个操作数结果为true,第二个操作数就不会执行操作。仍然为3.
console.log(c);
console.log(b);


逻辑或 左边的结果为true时,逻辑或右边的操作不会执行,即不会执行b++这个操作,b的值仍然为3,

乘性操作符

乘性操作符包括:乘法(*)、除法(/)、求余(%)。

乘法(*)

乘法返回操作数的乘积。

注意:

无穷大与0相乘得NaN。

无穷大与无穷大相乘得无穷大。

如果有一个操作数是NaN,则结果为NaN。

除法(/)

注意:

0除以0得NaN。

有一个操作数为NaN,结果为NaN。

无穷大除以无穷大得NaN。

求余(%)

求余的规则与除法规则相似。

求余可以用于求个位、十位、百位、千位、万位等。

加性操作符

加性操作符包括加法、减法。

加法(+)

规则如下:

如果有一个操作数是NaN,则结果是NaN。

正无穷与正无穷相加,结果是正无穷。

负无穷与负无穷相加,结果是负无穷。

正无穷与负无穷相加,结果是NaN。

如果几个操作数是字符,则将两个字符拼接起来即可。

如果有一个操作数是字符,则需要将其它操作数转换为字符,再将它们拼接起来。
 a、 如果其它的操作数是布尔值、对象、数值,则用它们的toString()方法将其转换为字符,再拼接。
 b、如果操作数是undefined和null,则用String()方法转换为字符,再拼接。

减法(-)

规则:

如果有一个操作数是NaN,则结果是NaN。

正无穷与正无穷相减,结果是NaN。

负无穷与负无穷相减,结果是NaN。

正无穷与负无穷相减,结果是无穷大。

 如果有一个操作数是布尔值、对象、数值、null、nudefined,则用Number()方法将其转换为数值,再根据前面的规则相减.

var a = 5 - true;//结果为4,true转换为1
var b = 5 - NaN;//结果为NaN
var c = 5 - "";//结果为5,空字符转换为0
var d = 5 - "4";//结果为1,"4"转换为4
var e = "" - 5;//结果为-5,空字符转换为0


关系操作符

关系操作数有:小于(<)、大于(>)、小于等于(<=)、大于等于(>=)。关系操作符,对比的结果就是一个布尔值(true或false)

规则:

如果操作数是数值,则执行数值大小对比。

如果两个操作数是字符,则比较字符对应的字符编码大小

如果有一个操作数是数值,则将另一个操作数转换为数值,再对比大小。

如果两个操作数是布尔值,将布尔值转换为数值,再作比较。

var a = "abc";
var b = "Abc";
var c = 5;
var d = "a"
console.log(a > b); /* 返回true */
console.log(a < b); /* 返回false */
console.log(c > d); /* 字符a转换数值为NaN 返回false */


小写字母的字符编码比大写字母的字符编码大。

相等操作符

相等操作符也是一种比较操作,比较的是相等性,比较的结果是布尔值。

相等与不相等操作符:将转换再比较,全等与不全等操作符:仅比较不转换。

相等与不相等操作符

相等(==)不相等(!=)

相等:比较的是数值大小是否相等。

规则:

1、如果两个操作数是布尔,则需将布尔值转换为数值。
2、一个是数值,一个是字符,先将字符转换成数值,再比较相等性。
3、null与undefined是相等的,但不是全等的。
4、NaN与任何类型数据相比,均不相等。
5,如果两个操作数是对象,则比较是不是同一个对象,是不是指向同一个对象。



全等与不全等

全等(===)不全等(!==)

全等:数据类型相同,且数值大小相等。

例子
null == undefined; //返回true

null === undefined; //返回false

注:因为相等不相等操作符存在类型转换问题,为了保持代码的完整性,所以建议使用全等与不全等。

条件操作符

条件操作符: var e = a >b ? c : d

如果a > b结果为true,则将c赋值于e,若a > b 为false,则将d赋值于e。

条件操作符常用于求绝对值。

赋值操作符

赋值操作符:var a = b;

将"="右边的值赋值给左边的变量。

逗号操作符

逗号操作符一般在定义多个变量时使用,如:var a, b, c, d;

除了定义多个变量用逗号操作符外,有时赋值也可以用,不过这种情况少见。

逗号操作符赋值:会将表达式最后一项赋值于变量。

如:var a = (1, 2, 3, 4, 5); 

以上会将5赋值给变量a.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: