总结01:代码在运行过程中,先提取var所声明的变量,然后再依次往下运行,在遇到没有声明和赋值(存值)的变量是程序就会报错,后面将不会运行。
表达式
1.原始表达式
原始表达式包含语句、关键字(保留字)和变量。
例如:
1; 1.02; 'hello world!';//直接量
var arr1 = [10, 203, 4]//数组初始化表达式
表达式是程序的最小单位 随处可见 给计算机表达指令的一种形式就是表达式 。
一元运算符
定义: 只能操作一个值的操作符叫做一元操作符,是 ECMAScript中最简单的操作符。
1.递增操作符
(1)在使用前置递增操作符给一个数值加 1 时,要把两个加号(++)放在这个数值变量前面。
例如:
var a=5;++a;在执行完这个代码以后,a的值就变成了6。
(2)在使用后置递增操作符给一个数值加1时,就要在数值变量后面加上两个加号(++)。
例如:
var a=5;a++;在执行完这个代码以后,a的值也变成了6。
但是在做赋值运算时,前置和后置运算符就会有区别。
例如:
var a=5;b=++a;在给b赋值时是先给a加上1后再取出a的值赋值到b身上,这时b的值就为6,a=6。var a=5;b=a++;而这个表达式在给b赋值时就是先取出a的值赋值给b,然后再给a加上1,此时b为5,a为6。
2.递减操作符
递减操作符与递增操作符类似
例题:var a=2;var b=a--;var c=++b-++a+--b+a+b;此时a b c分别为多少?
a=2 => b=2 => a=1 => b=3 => c=3-++a+--b+a+b => a=2 => c=3-2+--b+a+b => b=2 => c=3-2+2+a+b => c=3-2+2+2 ;所以a=2,b=2,c=7。
在做这种类型的题时要搞清楚是先取存后加减和还是先加减后取存。
逻辑与
1.逻辑与操作符由&&组成,var C=A&&B;在这个表达式中,当A的表达式判定结果为真时,此时C的结果就是B的表达式;而当A的表达式判定结果为假时,C的结果就为A表达式,B表达式将不会运行。对于布尔值,只有当两个操作数都为ture时才会返回ture,否则返回false。
2.逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值,在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。
此时,它遵循下列规则:
-
如果第一个操作数是对象,则返回第二个操作数;
-
如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;
-
如果两个操作数都是对象(或非0数),则返回第二个操作数;
-
如果有一个操作数是 null,则返回 null;
-
如果有一个操作数是 NaN,则返回 NaN;
-
如果有一个操作数是 undefined,则返回 undefined;
-
如果有一个操作数是 0 ,则返回0;
逻辑或
1.逻辑或操作竖线符号(||)表示,有两个操作数,例如:var a = A || B; 当A的表达式布尔值判定为真时,a就是A的表达式,B将不再运行;而当A的布尔量判定结果为假时,a就为B的表达式。
2.与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:
-
如果第一个操作数是对象,则返回第一个操作数;
-
如果第一个操作数的求值结果为 false,则返回第二个操作数;
-
如果两个操作数都是对象(或非0数),则返回第一个操作数;
-
如果两个操作数都是 null,则返回 null;
-
如果两个操作数都是 NaN,则返回 NaN;
-
如果两个操作数都是 undefined,则返回 undefined。
加减运算符
1.加法
(1)当两个操作符都为数值时,执行常规的加法操作操作,例如:var a=2;var b=6;var c=a+b;此时c的值为8。
(2)当两个操作符中有一个为字符串时:
-
如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
-
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来;如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于 undefined 和 null,则分别调用 String()函数并取得字符串"undefined"和"null"。
(3)而当两个操作符中都不为number的操作数时,根据下列规则返回结果:
-
如果有一个操作数是 NaN,则结果是 NaN;
-
如果是 Infinity 加 Infinity,则结果是 Infinity;
-
如果是-Infinity 加-Infinity,则结果是-Infinity;
-
如果是 Infinity 加-Infinity,则结果是 NaN;// Infinity +(- Infinity )=NaN
-
如果是+0 加+0,则结果是+0;
-
如果是-0 加-0,则结果是-0;
-
如果是+0 加-0,则结果是+0;
2.减法
减法运算会把元素转化为数字然后运算,例如: var a = "90"; var b = -(-a);console.log(b);其打印结果为90。
特殊规则,如下所示:
-
如果两个操作符都是数值,则执行常规的算术减法操作并返回结果;
-
如果有一个操作数是 NaN,则结果是 NaN;
-
如果是 Infinity 减 Infinity,则结果是 NaN;//infinity-infinity=NaN
-
如果是-Infinity 减-Infinity,则结果是 NaN;
-
如果是 Infinity 减-Infinity,则结果是 Infinity;
-
如果是-Infinity 减 Infinity,则结果是-Infinity;
-
如果是+0 减+0,则结果是+0;
-
如果是+0 减-0,则结果是-0;//+0-(-0)=(-0)
-
如果是-0 减-0,则结果是+0;
-
如果有一个操作数是字符串、布尔值、 null 或 undefined,则先在后台调用 Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是 NaN;
-
如果有一个操作数是对象,则调用对象的 valueOf()方法以取得表示该对象的数值。如果得到的值是 NaN,则减法的结果就是 NaN。如果对象没有 valueOf()方法,则调用其 toString()方法并将得到的字符串转换为数值。
关系操作
定义:关系运算符用于检测两个值之间的关系,也称之为 布尔表达式,总是返回一个布尔值true或false。
1.比较运算符
小于(<) 、大于(>) 、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,其结果都返回一个布尔量。例如:var a = 20;var re4 = (18 <= a);console.log(re4);其打印结果为ture。
而当关系操作符的操作数使用了非数值时,也要进行数据转换或完成某些奇怪的操作。以下就是相应的规则。
-
如果两个操作数都是数值,则执行数值比较。
-
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
-
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
-
如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。
-
如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。
2.相等运算符
(1)相等
相等操作符由两个等于号(==)表示,如果两个操作数的数值相等,则返回 true,否则返回false。在转换不同数据类型时的规则如下:
-
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1;
-
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
-
如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
-
null 和 undefined 是相等的。
-
要比较相等性之前,不能将 null 和 undefined 转换成其他任何值(null == 0为false)。
-
如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。NaN!=r任何-->
-
如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false。
(2)全等
全等操作符由 3 个等于号(===)表示,当两个操作数的数值和数据类型都相等的情况下才会返回 true,否则为false。例如: var a=200;var b="200";var a===b;其结果返回值为false,因为a和b的数据类型不一样,a为number,而b为string。
3.in运算符
检查右侧对象里面是否拥有左侧属性名,如果有返回true;反之,返回false。例如:
var obj = { age: 25, name: "karen" };var str1 = "age";var str2 = "life";此时返回值只有一个ture。
4.instanceof运算符
检查左侧的对象是否是右侧类的实例,如果是返回true;
如果一个对象是一个“父类”的子类的实例,则一样返回true;
三目运算符
三目运算符类似于D=A?B:C,A B C都是表达式,A表达式判定为布尔值的真时,D就会执行B表达式,终止运行C的表达式;而当A表达式判定为布尔值的假时, D就会执行C表达式。
例如:
var a = 20;var re = (a + 100) ? (b = 200) : (c = 90);此时a的返回值为20,b为200,而?卡面的表达式返回值为真,则re就会执行?后面紧挨着的表达式,所以re的返回值为200,而:后面的表达式将不再运行,所以c的返回值就时undefined。
赋值操作符
在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。
每个主要算术操作符(以及个别的其他操作符)都有对应的复合赋值操作符。这些操作符如下所示:
-
乘/赋值(*=);
-
除/赋值(/=);
-
模/赋值(%=);
-
加/赋值(+=);
-
减/赋值(-=);
例如:var a = 10;a+=20;含义就是a=a+20,则a的值就为30。
逗号操作符
使用逗号操作符可以在一条语句中执行多个操作, 逗号隔开的每一个表达式都要运行一遍,最后一个表达式作为整个逗号表达式的结果。例如:var num = (5, 1, 4, a=8, 0); // num 的值为 0,但是打印a将不会报错,因为a=8会运行并且隐式声明。
条件语句
条件语句用于基于不同的条件来执行不同的动作 ,在js开发过程中,if (表达式) { }中的表达式会被判定为布尔值==>Boolean(表达式)。而我们常用的条件语句如下:
-
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
-
if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
-
if...else if....else 语句- 使用该语句来选择多个代码块之一来执行
-
switch 语句 - 使用该语句来选择多个代码块之一来执行
for循环语句
1.for循环语句是最常用的循环语句之一,for循环通过设置循环计数器,重复执行一段代码块,直到计数器达到某个指定值。例如: for (A; B; C) { E } 的语法规则为:执行A,执行B表达式并判定其布尔结果,如果为假for整体代码执行结束;如果为真执行E后执行C然后再返回B以此循环,直至B的表达式布尔结果为假for整体代码执行结束。例如:for (var i = 0; i < 4; i = i + 1) { console.log(i) }其代码运行结果为0,1,2,3。
2.双for循环语句是指在for循环语句中嵌套一个循环语句,例如: for (var n = 1; n <= 9; n++) { for (var i = 1; i <= 9; i++) { var re=`${i}*${n}=${i * n}` console.log(re) } } 其打印结果为99乘法表。