运算符运算符也叫操作符,通过运算符可以对一个或多个值进行运算,并获取运算结果。
1. 算数运算符
当对非Number类型的值进行运算时,会将这些值转换为Number然后在运算,任何值和NaN做运算都得NaN。
+ - * / %
注意+: 如果对两个字符串进行加法运算,则会做拼串,会将两个字符串拼接为一个字符串,并返回任何的值和字符串做加法运算,都会先转换为字符串,然后再和字符串做拼串的操作。
result = 1 + 2 + "3"; //33
result = "1" + 2 + 3; //123
result = 100 - 5;
result = 100 - true; //99
result = 100 - "1"; //99
result = 2 * 2;
result11 = 2 * "8";//16
result11 = 2 * undefined; // NaN
2. 一元运算符
对于非Number类型的值, 它会将先转换为Number,然后在运算, 可以对一个其他的数据类型使用+,来将其转换为number,它的原理和Number()函数一样
3. 自增和自减少
和其他语言一致。
4.逻辑运算符
JS中为我们提供了三种逻辑运算符 ! & | ,和其他语言类似,采用!类似强制类型转换。
5.赋值运算符
- = 可以将符号右侧的值赋值给符号左侧的变量。
- a += 5 等价于 a = a + 5
- 其他类似。
6.关系运算符
通过关系运算符可以比较两个值之间的大小关系, 如果关系成立它会返回true,如果关系不成立则返回false。和其他语言类似。注意:
//比较两个字符串时,比较的是字符串的字符编码
//console.log("a" < "b");//true
//比较字符编码时是一位一位进行比较
//如果两位一样,则比较下一位,所以借用它来对英文进行排序
//console.log("abc" < "bcd");//true
//比较中文时没有意义
//console.log("戒" > "我"); //true
//如果比较的两个字符串型的数字,可能会得到不可预期的结果
//注意:在比较两个字符串型的数字时,一定一定一定要转型
console.log("11123123123123123123" < +"5"); //true
7.编码
注意unicode怎么使用, 字符串中使用和网页中使用方式。
/*
* 在字符串中使用转义字符输入Unicode编码
* \u四位编码
*/
console.log("\u2620");
<!--在网页中使用Unicode编码
&#编码; 这里的编码需要的是10进制
-->
<h1 style="font-size: 200px;">☠</h1>
<h1 style="font-size: 200px;">⚀</h1>
8.相等运算符
相等运算:符用来比较两个值是否相等,如果相等会返回true,否则返回false。
当使用==来比较两个值时,如果值的类型不同, 则会自动进行类型转换,将其转换为相同的类型
然后再比较。注意特殊情况:NaN不和任何值相等,包括他本身,可以通过isNaN()来判断是否是NaN.
不相等: 使用!=,也会自动类型转换。
全等:用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换如果两个值的类型不同,直接返回false.
不全等: !== ,用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换如果两个值的类型不同,直接返回true.
9.条件运算符
条件运算符也叫三元运算符.和其他语言一致。
条件表达式?语句1:语句2;
10.运算符优先级
/*
* , 运算符
* 使用,可以分割多个语句,一般可以在声明多个变量时使用,
*/
//使用,运算符同时声明多个变量
//var a , b , c;
//可以同时声明多个变量并赋值
//var a=1 , b=2 , c=3;
alert(b);
就和数学中一样,在JS中运算符也有优先级,比如:先乘除 后加减, 在JS中有一个运算符优先级的表, 在表中越靠上优先级越高,优先级越高越优先计算,如果优先级一样,则从左往右计算。但是这个表我们并不需要记忆,如果遇到优先级不清楚,可以使用()来改变优先级。
var result = 1 || 2 && 3;
console.log("result = "+result); // 1
11.代码块
我们的程序是由一条一条语句构成的,语句是按照自上向下的顺序一条一条执行的, 在JS中可以使用{}来为语句进行分组, 同一个{}中的语句我们称为是一组语句, 它们要么都执行,要么都不执行, 一个{}中的语句我们也称为叫一个代码块,在代码块的后边就不用再编写;JS中的代码块,只具有分组的的作用,没有其他的用途 , 代码块内容的内容,在外部是完全可见的。
12. 流程控制语句(注意问题的拆解,再扩展思路)
语句的分类:
- 条件判断语句
使用条件判断语句可以在执行某个语句之前进行判断。
if
if else if - 条件分支语句
如果分支比较多,建议使用switch和其他语言类似。 -
* 语法: * switch(条件表达式){ * case 表达式: * 语句... * break; * case 表达式: * 语句... * break; * default: * 语句... * break; * }
- 循环语句
通过循环语句可以反复的执行一段代码多次 -
while循环
-
do...while循环
-
for
* - 执行流程: * do...while语句在执行时,会先执行循环体, * 循环体执行完毕以后,在对while后的条件表达式进行判断, * 如果结果为true,则继续执行循环体,执行完毕继续判断以此类推 * 如果结果为false,则终止循环 * * 实际上这两个语句功能类似,不同的是while是先判断后执行, * 而do...while会先执行后判断, * do...while可以保证循环体至少执行一次, * 而while不能
* for语句,也是一个循环语句,也称为for循环 * 在for循环中,为我们提供了专门的位置用来放三个表达式: * 1.初始化表达式 * 2.条件表达式 * 3.更新表达式
break和continue
break关键字可以用来退出switch或循环语句,不能在if语句中使用break和continue, break关键字,会立即终止离他最近的那个循环语句.
另外, 可以为循环语句创建一个label,来标识当前的循环。label:循环语句。
使用break语句时,可以在break后跟着一个label,这样break将会结束指定的循环,而不是最近的。
outer: for(var i=0 ; i<5 ; i++){ console.log("@外层循环"+i) for(var j=0 ; j<5; j++){ break outer; console.log("内层循环:"+j); } }
continue关键字可以用来跳过当次循环,同样continue也是默认只会对离他最近的循环循环起作用.
程序优化:
调整逻辑或算法提升性能。
-
//console.time("计时器的名字")可以用来开启一个计时器 //终止计时器 //console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数 console.timeEnd("test"); //它需要一个字符串作为参数,这个字符串将会作为计时器的标识