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

1、存在争议的运算符:JavaScript 定义了 47个运算符,另有 4 个存在争议的运算符。它们具有多重功能,在不同环境中可能会执行不同的操作,而且它们拥有更高的优先级(15级)。
(1).(点号):读、写对象的属性,语法格式为“对象...属性”。
(2)[](中括号):读、写数组的元素,或者读、写对象的属性,语法格式为“数组[整数]”“对象['属性名称']”。
(3)()(小括号):定义函数、调用函数、表达式分组等,常用语法格式为“函数(参数)”“(表达式)”。
(4)new:创建实例对象或者调用函数,语法格式为“new类型”“new函数”。
 
2、一元运算符:一个操作符仅对一个操作数执行某种运算,如取反、递加、递减、转换数字、类型检测、删除属性等运算。
例如:
document.write(!false);  //取反返回值true
 
3、二元运算符:一个运算符必须包含两个操作数。例如,两个数相加、两个值比较大。大部分运算符都需要操作数配合才能够完成运算。
例如:
document.write(3+5);  //返回值8
 
4、三元运算符:一个运算符必须包含三个操作数。JavaScript 中仅有一个三元运算符——条件运算符?:(if语句的简化形式)。
例如:
document.write(1>2 ? true : false);  //返回值false
 
5、操作数类型:运算符操作的数据并不是随意的,大部分都有类型限制。每个运算符执行运算之后,都会有明确的返回类型。JavaScript 能够根据运算环境自动转换操作数的类型,以便完成运算任务。
例如:
document.write("10"-"20");  //字符串进行减法运算,自动转换为数值,结果返回数值-10
document.write("10" + "20");  //字符串相连运算,返回"1020"
document.write(0 ? 1 : 2);  //数值0被转换为布尔值 false,返回2
document.write(3 > "5");  //字符串"5"被转换为数值,返回false
document.write(true * "5");  //true被转换为数值1,返回5
 
6、运算符的优先级与数学中各运算符优先级基本一致,如:括号>乘除>加减>赋值。
例如:
document.write(n=5-2*2);  //先乘再减,返回1
document.write(n=(5-2)*2);  //括号内运算,再乘法,然后赋值,返回6
document.writeg((n=5-2)*2); //括号内先减法再赋值,然后乘法,返回6
 
document.write((1+n=5-2)*2);   //括号内先加,变量n未知,返回异常
 
7、运算符的结合性一元运算符、三元运算符和赋值运算符都是按照先右后左的顺序进行结合并运算。
例如:
document.write(typeof typeof 5);  //右侧先运算,typeof 5判断返回值是字符串“number”,再判断类型,即返回“string”
 
8、左值左值就是只能出现在赋值运算符左侧的值,在 JavaScript 中主要指变量、对象的属性、数组的元素。
 
9、赋值下列具有赋值功能的运算符能够改变操作数的值:
赋值运算符=
附加操作的赋值运算符如+=、%=等
递增++或递减--运算符
delete运算符(功能等同于赋值 undefined)
例如:
var a = 1;
a = (a++) + (++a) - (a++) - (++a);
document.write(a); //第一个(a++)返回值为1,第一个(++a)返回值为3,第二个(a++)返回值为3,第二个(++a)返回值为5,最终返回-4
 
a=a++可以理解为:
a=a++:
{
  {STEP1
    temp=a;
    a=a+1;
    return temp;
  }
  {STEP2
    a=temp;
  }
}
 
10、加法运算加运算符能够根据操作数的数据类型,决定是相加操作,还是相连操作。
例如:
var n = 5;  //定义并初始化任意一个数值
document.write(NaN + n);  //NaN与任意操作数相加,结果都是NaN
document.write(Infinity + n);  //Infinity与任意操作数相加,结果都是Infinity
 
document.write(1 + "1");  //操作数中有一个是字符串,则进行相连运算
document.write(3.0 + 4.3 + "");  //先求和,再连接,返回"7.3"
document.write(3.0 + "" + 4.3);  //先连接,再连接,返回"34.3"
 
11、减法运算:在减法运算中,如果操作数为字符串,先尝试把它转换为数值,再进行运算。如果有一个操作数不是数字,则返回 NaN。
例如:
var n = 5;  //定义并初始化任意一个数值
document.write(NaN - n);  //NaN与任意操作数相减,结果都是NaN
document.write(Infinity - n);  //Infinity与任意操作数相减,结果都是Infinity
 
document.write(2 - "1");  //返回1
document.write(2 - "a");  //字符串"a"无法转换成有效数值,返回NaN
document.write(parseFloat("100aaa")-50);  //返回50
 
12、乘法、除法运算需要注意特殊操作数的乘法、除法运算。
例如:
var n = 5;  //定义并初始化任意一个数值
document.write(NaN * n);  //NaN与任意操作数相乘,结果都是NaN
document.write(Infinity * n);  //Infinity与任意非零正数相乘,结果都是Infinity
document.write(Infinity * (- n));  //Infinity与任意非零负数相乘,结果是-Infinity
document.write(Infinity * 0);  //Infinity与0相乘,结果是NaN
document.write(Infinity * Infinity);  //Infinity与Infinity相乘,结果是Infinity
 
document.write(NaN / n);  //如果一个操作数是NaN,结果都是NaN
document.write(Infinity / n);  //Infinity被任意数字除,结果是Infinity或-Infinity
                            //符号由第二个操作数的符号决定
document.write(Infinity / Infinity);  //返回NaN
document.write(n / 0);  //0除一个非无穷大的数字,结果是Infinity或-Infinity,符号由第二个操作数的符号决定
 
13、求余运算也称模运算,主要针对整数进行操作,也适用于浮点数。要注意特殊操作数的求余运算。
例如:
var n = 5;
document.write(3 % 2);  //返回余数1
document.write(3.1 % 2.3);  //返回余数0.8000000000000003
document.write(Infinity % n);  //返回NaN
document.write(Infinity % Infinity);  //返回NaN
document.write(n % Infinity);  //返回5
document.write(0 % n);  //返回0
document.write(n % 0);  //返回NaN
 
14、取反运算:取反运算符是一元运算符,也称一元减法运算符。注意特殊操作数的取反运算。
例如:
document.write(- 5);  //返回-5。正常数值取负数
document.write(- "5");  //返回-5。先转换字符串数字为数值类型
document.write(- "a");  //返回NaN。无法完全匹配运算,返回NaN
document.write(- Infinity);  //返回-Infinity
document.write(- (- Infinity));  //返回Infinity
document.write(- NaN);  //返回NaN
 
15、递增和递减递增++和递减--运算就是通过不断的加 1 或减 1,然后把结果赋值给左侧操作数,以实现改变自身结果的一种简洁方法。
前置递增(++n):先递增,再赋值。
前置递减(--n):先递减,再赋值。
后置递增(n++):先赋值,再递增。
后置递减(n--):先赋值,再递减。
例如:
var a = 1;
var b,c,d,e;
b = a++ ;
document.write(b); //返回1
document.write(a); //返回2
c = ++a ;
document.write(c); //返回3
d = a-- ;
document.write(d); //返回3
e = --a ;
document.write(e); //返回1
 
16、与运算:逻辑与运算(&&)是 AND 布尔操作。只有两个操作数都为 true 时,才返回 true,否则返回 false。具体描述如表所示。
(逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式。)
第 1 步:计算第一个操作数(左侧表达式)的值。
第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。
第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
第 4 步:返回第二个操作数的值。
例如:
var user = 1;  //定义变量
user && document.write("没有赋值");  //返回提示信息“没有赋值”
document.write(typeof ("null" && null));  //返回null的类型:对象
document.write(typeof (null && "null"));  //返回null的类型:对象
document.write(typeof ("NaN" && NaN));  //返回NaN的类型:数值
document.write(typeof (NaN && "NaN"));  //返回NaN的类型:数值
document.write(typeof ("Infinity" && Infinity));  //返回第二个操作数Infinity的类型:数值
document.write(typeof (Infinity && "Infinity"));  //返回第二个操作数"Infinity"的类型:字符串
document.write(typeof ("undefined" && undefined));  //返回undefined
document.write(typeof (undefined && "undefined"));  //返回undefined
 
17、或运算逻辑或运算(||)是布尔 OR 操作。如果两个操作数都为 true,或者其中一个为 true,就返回 true,否则就返回 false。
(逻辑或也是一种短路逻辑,如果左侧表达式为 true,则直接短路返回结果,不再运算右侧表达式。)
第 1 步:计算第一个操作数(左侧表达式)的值。
第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 true,那么就会结束运算,直接返回第一个操作数的值。
第 3 步:如果第一个操作数可以转换为 false,则计算第二个操作数(右侧表达式)的值。
第 4 步:返回第二个操作数的值。
例如:
var n = 3;
(n == 1) && document.write(1) || //判断为false继续判断下一个操作数
(n == 2) && document.write(2) || //判断为false,或运算结果依然为false,继续判断下一个操作数
(n == 3) && document.write(3) || //判断为true,与运算返回3,或运算结果返回3
( ! n ) && document.write("null"); //注意:这里不需要判断第二个操作数的逻辑值,但是依然要执行这一句内容

18、非运算:逻辑非运算!是布尔取反操作(NOT)。作为一元运算符,直接放在操作数之前,把操作数的值转换为布尔值,然后取反并返回。
例如:
document.write( ! {} );  //如果操作数是对象,则返回false
document.write( ! 0 );  //如果操作数是0,则返回true
document.write( ! (n = 5));  //如果操作数是非零的任何数字,则返回false
document.write( ! null );  //如果操作数是null,则返回true
document.write( ! NaN );  //如果操作数是NaN,则返回true
document.write( ! Infinity );  //如果操作数是Infinity,则返回false
document.write( ! ( - Infinity ));  //如果操作数是-Infinity,则返回false
document.write( ! undefined );  //如果操作数是undefined,则返回true
document.write( ! 0 );  //返回true
document.write( ! ! 0 );  //返回false
 
19、大小比较运算符:比较运算中的操作数可以是任意类型的值,但是在执行运算时,会被转换为数字或字符串,然后再进行比较。如果是数字,则比较大小;如果是字符串,则根据字符编码表中的编号值从左到右逐个比较每个字符。如果操作数都无法转换为数字或字符串,则比较结果为 false。
(比较运算返回值总是布尔值)
< 如果第一个操作数小于第二个操作数,则返回true;否则返回 false
<= 如果第一个操作数小于或等于第二个操作数,则返回true;否则返回 false
>= 如果第一个操作数大于或等于第二个操作数,则返回true;否则返回 false
> 如果第一个操作数大于第二个操作数,则返回true;否则返回 false
例如:
document.write( 4 > 3 ); //返回true
document.write("4" > Infinity ); //返回false
document.write("4" >"3");  //返回true
document.write("ab" >"cb"); //返回false
document.write("a" >"3");  //返回true,字符a编码为61,字符3编码为33
document.write("a" > 3);  //返回false,字符a被强制转换为NaN