JS 操作符


一、一元操作符

1.递增和递减操作符

前置型    ++i    --i

后置型    i++    i--

执行前置递增和递减操作时,变量的值都是在语句被求值之前改变的。

示例1:

var a = 10;

var b = 20;

var c = ++a + b;    

var d = a + b;    

console.log(c);    //31

console.log(d);    //31

示例2:

var a = 10;

var b = 20;

var c = a++ + b;

var d = a + b;

console.log(c);    //30

console.log(d);    //31

示例3:

var a = 1;

var b = ++a +a;

var c = a++ +a;

console.log(b);    //4

console.log(c);    //5

 

数值、字符串、布尔值、对象都能使用递增和递减操作符;如果不是数值数据,则调用转型函数Number()转换为数值,再进行相应的操作。

 

2.一元加和减操作符

一元加和减操作符,主要用于基本的算术运算,也可以用于转换数据类型。

 一元加操作符,放在数值前面,对数值不会产生任何影响;但是放在非数值前面,则会调用Number()函数,对该非数值的值进行转换。

一元减操作符,用于表示负数;应用于非数值时,先调用Number()函数,再将得到的结果转换为负数。

 

二、位操作符    ——    好高大上的感觉,先行跳过,有待补充

 

三、布尔操作符

1.逻辑非(!)

逻辑非操作符可用于JS中的任何值,首先将它的操作数转换为布尔值,然后对其取反。

规则如下:

如果操作数是一个对象,转换为布尔值为true,取反,为false;

如果操作数是null,转换为布尔值为false,取反,为true;

空字符串,false,取反,为true;

非空字符串,true,取反,为false;

数值0/NaN,为false,取反,为true;

非0数值(Infinite),为true,取反,为false;

undefined,为false,取反,为true。

同时使用两个逻辑非操作符(!!)可将一个值转换为其对应的布尔值,其结果与调用Boolean()函数一致。

 

2.逻辑与(&&)

逻辑与操作属于短路操作,如果第一个操作数是false,则结果直接为false;如果第一个操作数为true,则结果为第二个操作数。

在有一个(或两个)操作数不是布尔值的情况下,把操作数转换为布尔值进行逻辑与操作,但是返回结果为原值。

示例1:

var a = 0;

var b = "string";

console.log(a&&b);    //0

console.log(b&&a);    //0

注意:在逻辑与操作中使用未定义的值可能会导致错误。

var x = 5;

alert(x&&y);    //ReferenceError: y is not defined

 

3.逻辑或(||)

逻辑或也是短路操作,如果第一个值为true,则直接返回true,无需对第二个操作数求值;如果第一个操作数为false,则返回第二个操作数;即使第二个操作数也是false,也是返回第二个操作数。

在有一个(或两个)操作数不是布尔值的情况下,把操作数转换为布尔值进行逻辑或操作,但是返回结果为原值。

var x = 0;

var y = null;

console.log(x||y);    //null

注意:在逻辑或操作中使用未定义的值可能会导致错误。

利用逻辑或,避免为变量赋null或undefined值:

var myObject = preferredObject || backupObject;

 

四、乘性操作符

1.乘法(*)

如果操作数都是数值,执行常规乘法计算;

如果有一个数是NaN,结构为NaN;

如果Infinite与0相乘,结果为NaN;

如果Infinite与非0数值相乘,结果为Infinite;

如果Infinite与Infinite相乘,结果为Infinite;

如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。

 

2.除法(/)

如果操作数都是数值,执行常规除法计算;

如果有一个数是NaN,结果为NaN;

Infinite除以Infinite,结果为NaN;

Infinite除以非0数值,结果为Infinite;

Infinite除以0,结果为Infinite;

0除以0,结果为NaN;

非0有穷数除以0,结果为Infinite;

如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。

 

3.求模(%)

如果操作数都是数值,执行常规除法计算,返回所得的余数;

如果有一个数是NaN,结果为NaN;

如果Infinite除以Infinite,结果为NaN;

如果Infinite除以有穷数,结果为NaN;

如果有穷数除以0,结果为NaN;

如果被除数有穷除以Infinite,结果为被除数。

0除以任何数,结果为0;

如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。

 

五、加性操作符

1.加法

如果有一个数是NaN,结果为NaN;

如果是Infinite加Infinite,结果为Infinite;

如果是-Infinite加-Infinite,结果为-Infinite;

如果是Infinite加-Infinite,结果为NaN;

如果是+0加+0,结果为+0;

如果是-0加-0,结果为-0;

如果是+0加-0,结果为+0;

如果两个操作数都是字符串,则将两个字符串拼接起来;

如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接起来。

如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值;

对于undefined和null,则调用String()函数并取得相应的字符串“undefined”和“null”。

var a = 5;

var b = 10;

var message = "The sum of a and b is" + a + b;    //结果为510

var message = "The sum of a and b is" + (a + b);    //结果为15

 

2.减法

如果有一个数是NaN,结果为NaN;

如果是Infinite减Infinite,结果为NaN;

如果是-Infinite减-Infinite,结果为NaN;

如果是Infinite减-Infinite,结果为Infinite;

如果是-Infinite减Infinite,结果为-Infinite;

如果是+0减+0,结果为+0;

如果是-0减-0,结果为+0;

如果是+0减-0,结果为-0;

如果有一个操作数是字符串、布尔值、null或undefined,则先调用Number()函数;

如果有一个操作数是对象,则先调用valueOf()方法,如果得到的值是NaN,则减法的结果就是NaN;如果没有valueOf()方法,则调用其toString()方法。

 

六、关系操作符

小于(<)、小于等于(<=)、大于(>)、大于等于(>=)

如果两个操作数都是数值,则执行数值比较;

如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;

如果一个操作数是数值,则将另一个操作数转换为数值;

如果一个操作数是对象,则调用这个对象的valueOf()方法;如果对象没有valueOf()方法,则调用toString()方法。

如果一个操作数是布尔值,则将其转换为数值;

任何操作数与NaN进行比较,结果都会返回false。

 

七、相等操作符

1.相等(==)与不相等(!=)

先转换操作数,再比较相等性;基本规则:

如果有一个操作数是布尔值,在比较之前先转换为数值;

如果有一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;

如果有一个操作数是对象,另一个不是,则调用对象的valueOf()方法;

如果两个操作数都是对象,则比较它们是不是同一个对象;如果两个操作数都指向同一个对象,则返回true,否则返回false;

null值与undefined值相等;

在比较相等性之前,不能将null值或undefined转换成其它任何值;

NaN不等于任何值,即使是它自己。

 

2.全等(===)和不全等(!===)

只有在不转换数值类型的情况下相等,全等才会返回true;

null == undefined;但是null !== undefined

 

八、条件操作符

variable = boolean_expression ? true_value : false_value;

对布尔值表达式求值,若为true,则返回第一个值;若为false,则返回第二个值。

 

九、赋值操作符

赋值操作符的作用,将右边的值赋给左边的变量。

如果在赋值操作符的左边添加其它操作符,可以完成复合赋值操作,简化赋值操作;

var num = 10;

num +=10 ;    //num = num +10;

 

十、逗号操作符

在一条语句中声明多个变量;

用于赋值,表达式中的每一项都会被计算,但是返回最后一项;

var num = (1,2,3,4,5);

alert(num);    //5


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM