版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/funkstill/article/details/84797594
目录
操作符
包括算术操作符、位操作符、关系操作符和相等操作符。
一元操作符
//递增和递减操作符
var age = 29;
var anotherAge = --age + 2;
alert(age); // 输出 28
alert(anotherAge); // 输出 30
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 等于 22
var num4 = num1 + num2; // 等于 21
//一元加和减操作符
var num = 25;
num = +num; // 仍然是 25
/*
在对非数值应用一元加操作符时,该操作符会像 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
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
位操作符
//按位非(NOT)
var num1 = 25; // 二进制 00000000000000000000000000011001
var num2 = ~num1; // 二进制 11111111111111111111111111100110
alert(num2); // -26
var num1 = 25;
var num2 = -num1 - 1;
alert(num2); // "-26"
//按位与(AND)
var result = 25 & 3;
alert(result); //1
/*
* 25 = 0000 0000 0000 0000 0000 0000 0001 1001
* 3 = 0000 0000 0000 0000 0000 0000 0000 0011
* ---------------------------------------------
* AND = 0000 0000 0000 0000 0000 0000 0000 0001
*/
//按位或(OR)
var result = 25 | 3;
alert(result); //27
/*
* 25 = 0000 0000 0000 0000 0000 0000 0001 1001
* 3 = 0000 0000 0000 0000 0000 0000 0000 0011
* --------------------------------------------
* OR = 0000 0000 0000 0000 0000 0000 0001 1011
*/
//按位异或(XOR)
var result = 25 ^ 3;
alert(result); //26
/*
* 25 = 0000 0000 0000 0000 0000 0000 0001 1001
* 3 = 0000 0000 0000 0000 0000 0000 0000 0011
* ---------------------------------------------
* XOR = 0000 0000 0000 0000 0000 0000 0001 1010
*/
//左移
//左移不会影响操作数的符号位。
var oldValue = 2; // 等于二进制的 10
var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64
//有符号的右移
var oldValue = 64; // 等于二进制的 1000000
var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2
//无符号右移
var oldValue = 64; // 等于二进制的 1000000
var newValue = oldValue >>> 5; // 等于二进制的 10 ,即十进制的 2
var oldValue = -64; // 等于二进制的 11111111111111111111111111000000
var newValue = oldValue >>> 5; // 等于十进制的 134217726
布尔操作符
//逻辑非
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
//模拟Boolean()
alert(!!"blue"); //true
alert(!!0); //false
alert(!!NaN); //false
alert(!!""); //false
alert(!!12345); //true
//逻辑与(短路操作符)
var found = true;
var result = (found && someUndefinedVariable); // 这里会发生错误
alert(result); // 这一行不会执行
var found = false;
var result = (found && someUndefinedVariable); // 不会发生错误
alert(result); // 会执行( "false"),因为found为false后直接短路,不再进行后面
//逻辑或(短路操作符)
var found = true;
var result = (found || someUndefinedVariable); // 不会发生错误
alert(result); // 会执行( "true")
var found = false;
var result = (found || someUndefinedVariable); // 这里会发生错误
alert(result); // 这一行不会执行
//应用
var myObject = preferredObject || backupObject;
乘性操作符
//乘法
var result = 34 * 56;
//除法
var result = 66 / 11;
//如果是非零的有限数被零除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
// 求模
var result = 26 % 5; // 等于 1
加性操作符
//加法
var result = 1 + 2;
var result1 = 5 + 5; // 两个数值相加
alert(result1); // 10
var result2 = 5 + "5"; // 一个数值和一个字符串相加
alert(result2); // "55"
var num1 = 5;
var num2 = 10;
//var message = "The sum of 5 and 10 is " + num1 + num2;
//alert(message); // "The sum of 5 and 10 is 510"
var message = "The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is 15"
//减法
var result = 2 - 1;
var result1 = 5 - true; // 4,因为 true 被转换成了 1
var result2 = NaN - 1; // NaN
var result3 = 5 - 3; // 2
var result4 = 5 - ""; // 5,因为"" 被转换成了 0
var result5 = 5 - "2"; // 3,因为"2"被转换成了 2
var result6 = 5 - null; // 5,因为 null 被转换成了 0
关系操作符
var result1 = 5 > 3; //true
var result2 = 5 < 3; //false
var result = "Brick" < "alphabet"; //true,按字符码比,大写在前
var result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false
var result = "23" < "3"; //true '2'的字符码50小于'3'的字符码50
var result = "23" < 3; //false
var result = "a" < 3; // false,因为"a"被转换成了 NaN
相等操作符
//相等和不相等
/*
* null == undefined true true == 1 true
* "NaN" == NaN false true == 2 false
* 5 == NaN false undefined == 0 false
* NaN == NaN false null == 0 false
* NaN != NaN true "5"==5 true
* false == 0 true
*/
//全等和不全等(比较之前不转换操作数)
var result1 = ("55" == 55); //true,因为转换后相等
var result2 = ("55" === 55); //false,因为不同的数据类型不相等
var result1 = ("55" != 55); //false,因为转换后相等
var result2 = ("55" !== 55); //true,因为不同的数据类型不相等
/*
* null == undefined 会返回 true,因为它们是类似的值
* null === undefined 会返回 false,因为它们是不同类型的值
*/
条件操作符
variable = boolean_expression ? true_value : false_value;
var max = (num1 > num2) ? num1 : num2;
赋值操作符
简化赋值操作。使用它们不会带来任何性能的提升。
var num = 10;
num += 10;//等价于num = num + 10;
逗号操作符
var num1=1, num2=2, num3=3;
var num = (5, 1, 4, 8, 0); // num 的值为 0