《Javascript 高级程序设计(第三版)》笔记0x3 JavaScript基本概念(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/funkstill/article/details/84797594