操作符:包含算数操作符、位操作符、关系操作符和相等操作符;ECMAScript操作符的与众不同之处在于,它们能够适用于很多值,例如字符串、数字值、布尔值、甚至对象。在应用于对象时,相应的操作符通常都会调用对象的valueOf()或toString()方法;
1:一元操作符(只能操作一个值的操作符叫做一元操作符)
(递增和递减操作符)-(一元加或减操作符)
//递增和递减操作符各有两个版本:前置型和后置型
/*******************(前置型)要操作的变量之前**************************/
//递增(++)
var age = 20;
++age; //21
var age1 = 20;
age1 = age1 + 1; //21
//递减(--)
var age2 = 20;
--age2; //19
//执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被称作副效应)
var age3 = 29;
var anotherAge = --age3 + 2;
console.log(age3); //28
console.log(anotherAge); //30
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; //21
var num4 = num1 + num2; //21
/*******************(后置型)要操作的变量之后**************************/
//后置递增和递减与前置递增和递减又一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的。
var age4 = 29;
age4++; //30
//把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作。但是,当语句中还包含其他操作时
var num5 = 2;
var num6 = 20;
var num7 = num5-- + num6; //22
var num8 = num5 + num6; //21
- 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,在执行加减1的操作。字符串变量变成数值变量;
- 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量;
- 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量;
- 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量;
- 在应用于浮点数值时,执行加减1的操作;
- 在应用对象时,先调用对象的valueOf()方法以取得一个可供操作的值,然后对该值应用前述规则;如果结果是NaN,则调用toString()方法后再应用前述规则。对象变量变成数值变量;
-
var s1 = "2"; var s2 = "z"; var s3 = false; var s4 = 1.1; var s5 = { valueOf: function () { return -1; } }; s1++; s2++; s3++; s4--; s5--; console.log(s1); //3 console.log(s2); //NaN console.log(s3); //1 console.log(s4); //0.1 console.log(s5); //-2
/**********(一元加操作符)**********************/ var s1 = "01"; var s2 = "1.1"; var s3 = false; var s4 = 1.1; var s5 = { valueOf: function () { return -1; } }; var s6 = "z" s1 = +s1; s2 = +s2; s3 = +s3; s4 = +s4; s5 = +s5; s6 = +s6; // console.log(s1); //1 // console.log(s2); //1.1 // console.log(s3); //0 // console.log(s4); //1.1 // console.log(s5); //-1 // console.log(s6); //NaN /**********(一元加减作符)**********************/ var s11 = "01"; var s21 = "1.1"; var s31 = false; var s41 = 1.1; var s51 = { valueOf: function () { return -1; } }; var s61 = "z" s11 = -s11; s21 = -s21; s31 = -s31; s41 = -s41; s51 = -s51; s61 = -s61; console.log(s11); //-1 console.log(s21); //-1.1 console.log(s31); //-0 console.log(s41); //-1.1 console.log(s51); //1 console.log(s61); //NaN