学习目标:
1.什么是表达式
- 表达式:将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来,有意义的式子称为表达式。 (简单的说就是±/*以及比较的运算)
2.JavaScript操作符的分类
- 算数操作符
加:+
减:-
乘:*
除:/
取余:%
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var num1 = 10,num2 = 5;
alert(num1+num2); //15
//最简单的算数运算
</script>
重点:
1.递增:++a与a++都是对a进行递增的操作
区别:++a先返回递增知乎的值
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var a=1;
alert(++a); //2
//先进行递增再返回值(本身为1,++在前,就是先加在返回)
</script>
a++则是先返回a本身的值,在本身再进行递增
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var a=1;
alert(a++); //1
//返回自身再进行递增
</script>
2.递减的操作也是一样的
在算数操作符里,还有一个叫隐式转换
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var num1 = 10,num2 = "5";
//隐式转换
alert(num1*num2); //50
alert(num1-num2); //5
//如果是字符串呢
var str = "c";
alert(num1 - str) //NaN
//当你使用+号时
alert(num1+str); //10+c
//这是因为浏览器把+看成了连接符
</script>
- 逻辑操作符
- 赋值操作符
简单的赋值:=
复合赋值:+=、-=、*=、/=、%=
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var a = 5;
//a = a +5 麻烦的写法
a+=5;
alert(a);
//他们的结果都为10,其他都一样操作
var str = "Hello"
str+="world"
alert(str) //起到连接作用
</script>
- 比较操作符
说明: == 为 等于(值相等)、===全等(数据类型与值都相等)、!=不等、!==不全等
== 、 ===
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var x = 10, y = "10";
z = x ==y; //只比较值
console.log(z) //true
z= x === y; //比较值同时也比较类型
console.log(z) //false
</script>
</body>
</html>
!== 、 !===
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var x = 10,y="10";
//!=为取反操作
z = x != y //false
z = x !== y; //true
console.log(z)
</script>
</body>
</html>
- 三元操作符
语法:条件?执行代码1:执行代码2
说明: 可以替代简单的if语句;(效率高且更加简洁)
如果条件成立,执行代码1,否则执行代码2.
<!DOCTYPE html>
<html>
<head>
<title>运算</title>
</head>
<body>
<script type="text/javascript">
var soce = 85;
var result = (soce >= 60)?"及格":"不及格";
console.log(result); //及格
//soce>=60为true,返回第一条执行代码。
</script>
</body>
</html>
- 逻辑操作符
&&:与
只要有一个条件不成立,就会返回false
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
var num1 = 10,num2 = 20,num3 = 30;
console.log(num1<num2 && num2 ==num3);//false
console.log(num2 < num3 && num3 > num1); //true
</script>
</body>
</html>
说明: 在有一个操作数不为布尔值得情况,逻辑与操作就一定返回值,此时它遵循下列规则:
- 如果第一个操作数隐式转换为true后,则返回第二个操作数(当第一个值被转换为布尔值时,就会返回第二个值)
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
//之前讲过所有的字符串除了""为false,其余都为true,所有数字除0以外,其余全为true
var num3 = 30,
str = "welcome";
console.log(str && num3) //30(返回第二个操作数)
console.log(80 && 50 && "hello"); //hello 多于两位,则返回最后一位
</script>
</body>
</html>
- 如果第一个操作数隐式转换为false,则返回第一个操作数值
(有一个数为null就返回null,有undefined就返回undefined,有NaN就返回NaN)
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
var n =null, num3 = 20;
colsole.log(n && num3) //null
</script>
</body>
</html>
||:或
只要有一个为true,就返回true。
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
console.log(0 || "abc") //abc
</script>
</body>
</html>
说明: 在有一个操作数不为布尔值得情况,逻辑与操作就一定返回值,此时它遵循下列规则:
- 如果第一个操作数隐式转换为true后,则返回第二个操作数(当第一个值被转换为布尔值时,就会返回第二个值)
如果两个操作数null,则返回null
如果两个数为NaN,则则会返回Nan
如果两个数为undefined,则返回undefined
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
console.log("hello" || 0); //hello
console.log(99 || 0 || "abc"); //99
console.log("" || 0 || "abc"); //abc
</script>
</body>
</html>
!:非
- 无论操作数是什么数据类型,逻辑非都会返回一个布尔值
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
console.log(!false); //true
console.log(!88); //false
console.log(!0); //true
console,log(!null) //true
</script>
</body>
</html>
- !!同时使用两个逻辑非操作符时:
第一个逻辑非操作会基于无论什么操作数返回一个布尔值,
第二个逻辑非则对改布尔值求反
<!DOCTYPE html>
<html>
<head>
<title>逻辑运算</title>
</head>
<body>
<script type="text/javascript">
console.log(!!false); //false
console.log(!!""); //false
</script>
</body>
</html>