2468工作室_成都网站开发_网页设计_二次开发_推广服务_二四六八工作室 我们一直坚信只有用心去做才能得到好的作品!
您当前的位置:主页 > 知识分享 >
快乐前端:JavaScript 学习知识点总结(五)
作者: 2468工作室 发布日期:2020-07-08 15:00 查看次数:

1、等值检测运算符:等值检测运算符包括 4 个:相等、不相等、全等、不全等。
==(相等) 比较两个操作数的值是否相等
!=(不想等) 比较两个操作数的值是否不相等
===(全等) 比较两个操作数的值是否相等,同时检测它们的类型是否相同
!==(不全等) 比较两个操作数的值是否不相等,同时检测它们的类型是否不相同
例如:
document.write("1" == 1);  //返回true。字符串被转换为数字
document.write("1" === 1);  //返回false
document.write(true == 1);  //返回true。true被转换为1
document.write(false == 0);  //返回true。false被转换为0
document.write(0 === false);  //返回false
document.write(null == 0);  //返回false
document.write(undefined == null);  //返回true
document.write(NaN == NaN);  //返回false
document.write(NaN != NaN);  //返回true
var a = "abc" + "d";
var b = "a" + "bcd";
document.write(a == b);  //返回true,数值和布尔值的相等比较运算效率比较高,而字符串需要逐个字符进行比较,相等比较运算效率比较低。
var c = {};
var d = {};
document.write(c === d);  //返回false,两个对象虽然结构相同,但是地址不同,所以不全等。
 
2、赋值运算符:赋值运算符左侧的操作数必须是变量、对象属性或数组元素,也称为左值。赋值之前先对右侧操作数执行某种操作,然后把运算结果复制给左侧操作数。
+= 加法运算或连接操作并赋值 a += b a = a + b
-= 减法运算并赋值 a -= b a= a - b
*= 乘法运算并赋值 a *= b a = a * b
/= 除法运算并赋值 a /= b a = a / b
%= 取模运算并赋值 a %= b a = a % b
<<= 左移位运算并赋值 a <<= b a = a << b
>>= 右移位运算并赋值 a >>= b a = a >> b
>>>= 无符号右移位运算并赋值位 a >>>= b a = a >>> b
&= 位与运算并赋值 a &= b a = a & b
|= 位或运算并赋值 a |= b a = a |= b
^= 位异或运算并赋值 a ^= b a = a ^ b
例如:
var a;
document.write(a = 6 && (b = function(){
 return a;
})()
); //赋值之前先对右侧操作数执行操作,此时a里面未赋值,所以b()函数返回为undefined,与运算结果依然为undefined,再赋值给a,因此最终返回undefined
 
3、对象操作运算符:对象操作运算主要是针对对象、数组、函数这 3 类复合型对象执行某种程序,设计的运算符包括 in、instanceof、delete。
 
4、in:in运算符能够检测左侧操作数是否为右侧操作数的成员。其中,左侧操作数是一个字符串,或者可以转换为字符串的表达式,右侧操作数是一个对象或数组。
例如:
var o = {  //定义对象
    a : 1,  //定义属性a
    b : function() {}  //定义方法b
}
document.write("a" in o);  //返回true
document.write("b" in o);  //返回true
document.write("c" in o);  //返回false
document.write("valueOf" in o);  //返回true,继承Object的原型方法
document.write("constructor" in o);  //返回true,继承Object的原型属性
 
5、instanceof: instanceof运算符能够检测左侧的对象是否为右侧类型的示例。
例如:
var a = new Array();  //定义数组
document.write(a instanceof Array);  //返回true
document.write(a instanceof Object);  //返回true,Array是Object的子类
document.write(a instanceof Function);  //返回false
 
6、delete: delete运算符能够删除指定对象的属性、数组元素或变量。如果删除操作成功,则返回 true;否则返回 false。
例如:
var a = {  //定义对象a
    x : 1,  //定义对象成员
    y : 2  //定义对象成员
};
var b;
document.write(a.x);  //调用对象成员,返回1
document.write(delete a.x);  //删除对象成员x成功,返回true
document.write(a.x);  //返回undefined,没有找到该对象成员
document.write(a.z);  //删除不存在的对象成员、数组元素、变量,都返回 true
document.write(delete b);  //返回false,var声明的变量不允许删除
 
7、逻辑位运算符位运算就是对二进制数执行计算,是整数的逐位运算。例如,1+1=2,在十进制计算中是正确的,但是在二进制计算中,1+1=10;对于二进制数 100 取反,等于 001,而不是 -100。
位运算符有 7 个,分为两类:
逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)
 
8、“&”运算符:“&”运算符(位与)用于对两个二进制操作数逐位进行比较,并根据下表所示的换算表返回结果。
第一个数的位值 第二个数的位值 运算结果
1 1 1
1 0 0
0 1 0
0 0 0
 
 
例如:
document.write(13 & 6);  //返回值4
 
0000 0000 0000 0000 0000 0000 0000 1101  =13
& 0000 0000 0000 0000 0000 0000 0000 0110  =6
----------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0100  =4
 
9、“|”运算符:“|”运算符(位或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 第二个数的位值 运算结果
1 1 1
1 0 1
0 1 1
0 0 0
 
 
例如:
document.write(13 | 6);  //返回值15
 
0000 0000 0000 0000 0000 0000 0000 1101  =13
| 0000 0000 0000 0000 0000 0000 0000 0110  =6
----------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1111  =15
 
10、“^”运算符:“^”运算符(位异或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 第二个数的位值 运算结果
1 1 0
1 0 1
0 1 1
0 0 0
 
 
例如:
document.write(13 ^ 6);  //返回值11
 
0000 0000 0000 0000 0000 0000 0000 1101  =13
^ 0000 0000 0000 0000 0000 0000 0000 0110  =6
----------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1011  =11
 
11、“~”运算符:“~”运算符(位非)用于对一个二进制操作数逐位进行取反操作。
第 1 步:把运算数转换为 32 位的二进制整数。
第 2 步:逐位进行取反操作。
第 3 步:发现符号位(最高位),将除符号位之外的其他数字取反。
第 4 步:末位加1取其补码。
第 5 步:把二进制转换为十进制。
~n == -n-1
 
例如:
var n = -4.9;
document.write(n); //4.9
n = ~n;
document.write(n);//3
n = ~n;
document.write(n);//4
 
0000 0000 0000 0000 0000 0000 0000 1101  =13
(1) 1111 1111 1111 1111 1111 1111 1111 0010  //取反
(2) 1000 0000 0000 0000 0000 0000 0000 1101  //除最高位,再取反
(3) 1000 0000 0000 0000 0000 0000 0000 1110  //补码,最高位为1(即负数),转为十进制=-14
 
12、“<<”运算符“<<”运算符执行左移位运算。在移位运算过程中,符号位始终保持不变。如果右侧空出位置,则自动填充为 0;超出 32 位的值,则自动丢弃。
例如:
document.write(5 << 2);  //返回值20
 
0000 0000 0000 0000 0000 0000 0000 0101  =5
<<2 0000 0000 0000 0000 0000 0000 0001 0100  =20
 
13、“>>”运算符:“>>”运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。
例如:
document.write(15 >> 3);  //返回值1
 
0000 0000 0000 0000 0000 0000 0000 1111  =15
>>3 0000 0000 0000 0000 0000 0000 0001 0001  =1
 
当符号位值为 1 时,则有效位左侧的空位全部使用 1 进行填充。
document.write(-15 >> 3);  //返回值1
 
1111 1111 1111 1111 1111 1111 1111 0001  =-15
>>3 1111 1111 1111 1111 1111 1111 1111 1110  =-2
 
14、“>>>”运算符:“>>>”运算符执行无符号右移位运算。它把无符号的 32 位整数所有数位整体右移,使用 0 来填充所有的空位。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。
例如:
document.write(-750 >> 5);  //返回值-24
document.write(-750 >>> 5);  //返回值134217704
 
 
1111 1111 1111 1111 1111 1101 0001 0010  =-750
>>5   1111 1111 1111 1111 1111 1111 1110 1000  =-24
>>>5  0000 0111 1111 1111 1111 1111 1110 1000  =134217704
 
15、条件运算符(?:):条件运算符是唯一的三元运算符,语法格式:b ? x : y
b 操作数必须是一个布尔型的表达式,x 和 y 是任意类型的值。
如果操作数 b 的返回值为 true,则执行 x 操作数,并返回该表达式的值。
如果操作数 b 的返回值为 false,则执行 y 操作数,并返回该表达式的值。
例如:
var a = null;  //定义变量a
typeof a != "undefined" ? a = a : a = 0;  //检测变量a是否赋值,否则设置默认值
document.write(a);  //显示变量a的值,返回null
 
16、逗号运算符(,):逗号运算符是二元运算符,它能够先执行运算符左侧的操作数,然后再执行右侧的操作数,最后返回右侧操作数的值。
(逗号运算符的优先级是最低的。)
例如:
var x = (y = 1,z = 2); //逗号运算符可以实现连续运算,为多个变量连续赋值。
document.write(x);  //返回2
document.write(y);  //返回1
document.write(z);  //返回2
 
for(var a = 1,b = 10,c = 100;++ c,a < b;a ++,c --){
document.write(a);
document.write(" ");
document.write(c);
document.write(" ");
}

17、void运算符:void 是一元运算符,它可以出现在任意类型的操作数之前执行操作数,却忽略操作数的返回值,返回一个 undefined。void 常用于 HTML 脚本中执行 JavaScript 表达式,但不需要返回表达式的计算结果。
例如:
var a = b = 2;  //定义并初始化变量的值
c = void (a -= (b *= 5));  //执行void运算符,并把返回值赋予变量d
document.write(a);  //返回-8
document.write(b);  //返回10
document.write(c);  //返回undefined
document.write(void 2 - 1);  //返回NaN,void 运算符优先级高于普通运算符
document.write(void (2 - 1));  //返回undefined
document.write(void (a = 0,a++));  //返回undefined,void 运算符能像函数一样使用