1.1-算术运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<script>
/*
1.运算符 : 有运算作用的符号
2.算术运算符 : 用于 数学算术运算
+ - * / %(求模运算,相当于取余数)
3.表达式 : 由运算符组成的式子
4.算术表达式 : 由算术运算符组成的式子 例如 1+1
重点: 任何表达式,都一定会有运算结果
*/
//将表达式的结果存入变量
let num = 1 + 1
console.log(num) //2
//直接打印表达式结果
console.log(10 - 1) //9
console.log(10 % 3) // 10除以3, 余数 1
</script>
</body>
</html>
1.2-赋值运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*赋值运算符
= += -= *= /= %=
*/
//+=
let num1 = 10;
num1 += 10;//这行代码相当于 num1 = num1 + 10 的简写形式
console.log ( num1 );//20
//-=
let num2 = 70;
num2 -= 10; //相当于 num2 = num2 - 10;
console.log(num2);//60
//*=
let num3 = 20;
num3 *= 4; //相当于 num3 = num3 * 4;
console.log(num3);//80
// /=
let num4 = 90;
num4 /= 3;//相当于 num4 = num4 / 3
console.log(num4);//30
let num5 = 10;
num5 %= 3; // num5 = num5 % 3;
console.log(num5);//1
</script>
</body>
</html>
1.3-自增自减运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//1.自增运算符 ++
//自增表达式: num++
let num1 = 10;
num1++;//这行代码相当于 num1 = num1 + 1 的简写形式
console.log ( num1 );//11
//2.自减运算符 --
//自减表达式: num--
let num2 = 20;
num2--;//这行代码相当于 num2 = num2 - 1 的简写形式
console.log ( num2 );//12
</script>
</body>
</html>
1.4-关系运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
/**1.关系运算符(比较运算符):比较两个数据之间的关系(某种条件是否成立)
* 八种: > >= < <= == != ===全等 !== 不全等
* 2.关系表达式:由关系运算符组成的式子 例如: 2 > 1
* 只要是表达式,就会有运算结果
* 3.关系表达式的结果一定是布尔类型:true代表成立,false代表不成立
*/
//1.基本使用
console.log ( 5 > 3 );//true 成立
console.log ( 100 < 1 );//false 不成立
//2.相等与不等:只比较数据的值,不比较数据的类型
//注意:一个 = 号表示赋值运算符 两个 == 是比较运算符,它们作用不一样,不要搞混淆了
console.log ( 1 == 1 );//true 常用
console.log ( "1" == 1 );//true 他们的值一样,只是数据类型不一样
//3.全等不全等: 先比较数据的值,再比较数据的类型
console.log ( "1" === 1 );//false 两者的值虽然相等都是1,但是他们数据类型不一样,所以不成立
</script>
</html>
扩展:字符串比较的是ASCII码:
ASCII码:计算机识别的二进制编码
1.5-逻辑运算符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
/*
0.关系运算符:某种条件的关系(成立/不成立),例如我的年龄大于你的年龄30>20
1.逻辑运算符:多个条件之间的关系
2.逻辑运算符只有三种
* && :逻辑与 ,读作并且
* || :逻辑或,读作或者
* ! :逻辑非,读作取反
* true(真)变false(假),false(假)变true(真)
* 3.逻辑表达式: 表达式1 逻辑运算符 表达式2
*/
//1.逻辑与&&结果: 一假为假 (左右两边同时成立,才为真,否则为假)
//表达式1 && 表达式2 运算结果
//真 真 真
//真 假 假
//假 真 假
//假 假 假
console.log ( 100 > 50 && 10 > 9 );//true 左右两边同时成立
console.log ( 100 > 500 && 10 > 9 );//false 因为左边不成立
//普通丈母娘找女婿 : 有房 有车 有存款 三个条件都要满足,缺一不可
//2.逻辑或 ||结果 : 一真则真 (左右两边同时为假,才为假,否则为真)
//表达式1 || 表达式2 运算结果
//真 真 真
//真 假 真
//假 真 真
//假 假 假
console.log ( 100 > 500 || 10 > 9 );//true 只要有一边为真则为真
console.log ( 100 > 500 || 8 > 9 );//false 只有两边都不成立才为假
//我的丈母娘找女婿 : 要么有房 要么有车 要么有存款 三个条件满足任何一个即可
//3.逻辑非! : 又叫做取反 真变假 假变真
// ! 表达式 结果
// 假 真
// 真 假
let res = !false;
console.log ( res );//true 假变真,真变假
console.log ( ! ( 2 > 1 ) );//false 2>1的结果是true 与true相反的就是false
//有的丈母娘找女婿 :只要不是外地的。 `非xxxx`类似于一种否定逻辑
</script>
</html>
运算符优先级
- 实际开发中,我们不需要刻意去记忆运算符优先级。你想让哪个式子先计算,使用小括号 () 包起来即可
数据类型转换
1.1-数据类型转换介绍
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
/* 本小节仅为介绍数据类型转换意义,不需要课堂敲代码
* 数据类型不一致,得不到预期计算结果
*/
//需求:让用户输入两个数字,然后相加,打印结果
let num1 = prompt('请输入第一个数字')
let num2 = prompt('请输入第二个数字')
let res = num1 + num2//'10' + '20'
console.log( res )//'1020'
</script>
</body>
</html>
1.2-转换为number类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//需求 : 输入两个数字,计算两个数字的和
// prompt输入框 得到的是string类型
// var num1 = +prompt('请输入第一个数字');
// var num2 = +prompt('请输入第二个数字');
// console.log(num1,num2);
// console.log(typeof num1,typeof num2);
// var res = parseInt(num1) + parseInt(num2);
// console.log(res);
//
/* 1.其他数据类型 转 Number
语义明确(提高代码阅读性)
parseInt() : 转换整数
parseFloat() :转换小数
Number() : 其他数据类型转数字 (boolean,undefined,null)
2.注意点: 数据类型转换并没有改变原有变量的值,而是产生一个新的值
*/
//1. parseInt() : 转换整数
// 从左往右依次解析字符,遇到非数字字符停止解析,并且返回解析好的整数
var str = '10';
var num = parseInt(str);
console.log(num);// 10
console.log(str);// '10' 类型转换不改变原有变量的值,而是产生一个新的值
console.log(typeof num);
console.log(parseInt('123.1.1a'));//123
//2.parseFloat() : 转换小数
//解析规则与parseInt一致,唯一的区别就是可以识别第一个小数点
var str = '5';
var num = parseFloat(str);
console.log(num);
console.log(parseFloat('123.1.1a'));//123.1
//3. Number() : 其他数据类型转数字
/*
a. 可以解析整数和小数
b. 只要有任意非数字字符得到NaN
*/
console.log(Number('6'));
console.log(Number('6.6'));
console.log(Number('123.1.a'));
//布尔类型转数字会得到0false和1 true
console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number(undefined));//NaN
console.log(Number(null));//0
</script>
</body>
</html>
1.3-number类型特殊值NaN
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//1.NaN是number类型中一个特殊值
// not a number:不是一个数字,表示错误的运算结果
console.log('张三-100')//NaN
console.log( Number('黑马程序员') )//NaN
//2.NaN不能参与任何计算,结果一律为NaN
//NaN实际场景: 开发中,我们一般不会接触到NaN,除非你的代码出bug了,数学计算出错
let num
console.log( num + 1 )//我们忘记给num赋值,导致undefined 与 1 相加得到NaN
</script>
</body>
</html>
1.4-转换为string类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
let num = 200
//1. String(数据)
console.log( String(num) )//'200'
console.log( String(true) )//'true'
console.log( String(undefined) )//'undefined'
console.log( String(null) )//'null'
//2. 变量名.toString()
/* a. 如果是undefined与null,这种方式会报错
b. 这种方式可以支持进制转换。 例如把 十进制转十六进制
*/
console.log( num.toString() )//'200'
console.log( num.toString(16) )//'c8'
</script>
</body>
</html>
1.5-转换为boolean类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// Boolean(数据)
/*
1.false: 有7种数据会得到false
0 -0 NaN '' undefined null false
2.true: 除false 7种之外的一切数据
*/
console.log( Boolean(0) )//false
console.log( Boolean(-0) )//false
console.log( Boolean(NaN) )//false
console.log( Boolean('') )//false
console.log( Boolean(undefined) )//false
console.log( Boolean(null) )//false
console.log( Boolean(false) )//false
</script>
</body>
</html>
1.6-隐式转换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
/*
隐式转换 : 当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算
(1)转换数字 : 算术运算符 + - * / %
(2)转换字符串 : 连接符+ (+号两边只要有一边是字符串,此时+就是连接符)
(3)转换布尔: 逻辑非 !
*/
//1.转换数字 : 算术运算符
console.log( '100' - 10 )//90 Number('100') - 10
console.log( 1 + true )//2 1 + Number(true)
console.log( +'10' )//10 +数学正号 Number(10)
//2.转换字符串 : 连接符
console.log( '1' + true )//'1true' '1' + String('true')
//3.转换布尔 : !
console.log( !1 )//false !Boolean(1)
console.log( !undefined )//true !Boolean(undefined)
</script>
</body>
</html>
1.7-undefined与null区别
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
/*
1. undefined : 未定义。 当变量只声明,但是没有赋值。此时默认值是undefined
* 说人话 : undefined相当于期房。 买了房,但是房子还没建出来。(未定义)
2. null : 有定义。 定义的值是空值。
* 说人话 : null相当于毛坯房。买了房,但是房子没住人,里面是空的。(空值)
*/
//相同点 : (1)值相等 (2)转布尔类型都是false
console.log( undefined == null )//true
console.log( Boolean(undefined) )//false
console.log( Boolean(null) )//false
//不同点 : (1)数据类型不同 (2)转number类型值不同
console.log( undefined === null )//false
console.log( Number(undefined) )//NaN
console.log( Number(null) )//0
</script>
</body>
</html>