JS的组成
- ECMAScript:JavaScript语法
- DOM:页面文档对象模型
- BOM:浏览器对象模型
注释
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
// 1.单行注释 Ctrl + /
/*
2.多行注释
多行注释
多行注释
*/
</script>
</head>
<body>
</body>
</html>
输入输出语句
方法 | 说明 | 归属 |
---|---|---|
alert(msg) | 浏览器弹出警示框 | 浏览器 |
console.log(msg) | 浏览器控制台打印输出信息 | 浏览器 |
document.write | 向body中输出内容 | |
prompt(info) | 浏览器弹出输入框,用户可以输入 | 浏览器 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>输入输出</title>
</head>
<body>
<script type="text/javascript">
//这是一个输入框
prompt('请输入您的年龄');
// 浏览器弹出一个警告框 展示给用户的
alert('最爱琴女E!');
// 让计算机在页面中输出一个内容
// 可以向body中输出一个内容
document.write('哈哈哈哈哈');
// 向控制台输出 给程序员测试用的
console.log('求抽到琴女DJ皮肤!!!');
</script>
</body>
</html>
<!-- 可以将js代码写在超链接的href属性中,这样当点击超链接时,会执行js代码 -->
a <a href="javascript:alert('点');">点一下</a>
<!-- 不会有任何反应 -->
a <a href="javascript:;">也点一下</a>
标识符
命名一个标识符需要遵守如下的规则:
- 标识符中可以含有字母、数字、_、$
- 标识符不能以数字开头
- 标识符不能是关键字或保留字
- 标识符一般采用驼峰命名法
- 首字母小写,每个单词的开头字母大写,其余字母小写:helloWorld xxxYyyZzz
变量
白话:变量就是一个装东西的盒子
通俗:变量是用于存放数据的容器,我们通过变量名获取数据,甚至数据可以修改
声明
//声明变量
var age;//声明一个名称为age的变量
var是一个js关键字,用来声明变量,使用该关键字声明变量后,计算机会自动为变量分配内存空间
age是程序员定义的变量名
赋值
age = 10;//给age这个变量赋值为10
= 用来把右边的值赋给左边的变量空间中,此处代表赋值的意思
变量值是程序员保存到变量空间里的值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
// 1.声明一个age变量
var age;
// 2.赋值
age = 18;
// 3.输出
console.log(age);
</script>
</head>
<body>
</body>
</html>
变量初始化
var age = 18;//声明变量同时赋值为18
案例
- 弹出一个输入框,提示用户输入姓名
- 弹出一个对话框,输出用户刚输入的姓名
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
//1.用户输入姓名
var myname = prompt('请输入您的名字');
//2.输出这个用户名
alert(myname);
</script>
</head>
<body>
</body>
</html>
变量语法扩展
更新变量
一个变量被重新赋值后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准
var age = 18;
age = 81;//最后的结果就是81,因为18被覆盖掉了
同时声明多个变量
同时声明多个变量时,只需要写一个var,多个变量名之间使用英文逗号隔开
var age = 10, name = '阿波', sex = 1;
特殊情况
情况 | 说明 | 结果 |
---|---|---|
var age; console.log(age) | 只声明,不赋值 | undefined |
console.log(age) | 不声明,不赋值,直接使用 | 报错 |
age = 10; console.log(age) | 不声明,只赋值 | 10 |
案例:交换两个变量的值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
// js是编程语言有很强的逻辑性在里面,实现这个要求的思路:先怎么做后怎么做,
// 1. 我们需要一个临时变量帮我们
// 2. 把apple1 给我们的临时变量 temp
// 3. 把apple2 里面的苹果给 apple1
// 4. 把临时变量里面的值给 apple2
var temp;
var apple1 = '青苹果';
var apple2 = '红苹果';
temp = apple1; //把右边给左边
apple1 = apple2;
apple2 = temp;
console.log(apple1);
console.log(apple2);
</script>
</head>
<body>
</body>
</html>
数据类型
在js中一共有六种数据类型
- String 字符串
- Number 数值
- Boolean 布尔值
- Null 空值
- Undefined 未定义
- Object 对象
其中String、Number、Boolean、Null、Undefined属于基本数据类型,而Object属于引用数据类型
Number
在js中,所有的数值都是Number类型,包括整数和浮点数
数值型进制:常见的有:二进制、八进制、十进制、十六进制
//1.八进制数字序列范围:0~7
var num1 = 07; //对应十进制的7
var num2 = 019; //对应十进制的19
var num3 = 08; //对应十进制的8
//2.十六进制数字序列范围:0~9以及A~F
var num = 0xA;
记住在js中八进制前面加0,十六进制前面加0x
JavaScript中数值的最大和最小值
alert(Number.MAX_VALUE);//1.7976931348623157e+308
alert(Number.MIN_VALUE);//5e-324
三个特殊值
alert(Infinity);//Infinity,代表无穷大,大于任何数值
alert(-Infinity);//-Infinity,代表无穷小,小于任何数值
alert(NaN);//NaN,代表一个非数值
isNaN()
用来判断一个变量是否为非数字的类型,返回true或者false
var usrAge = 21;
var isOk = isNaN(usrAge);
console.log(isNum); //false,21不是一个非数字
var userName = '阿波';
console.log(isNaN(userName)); //true,'阿波'是一个非数字
typeof
用来检测变量的数据类型
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {
name:'John', age:34} // 返回 object
Boolean
布尔类型有两个值:true和false,其中true表示真(对),而false表示假(错)
布尔型和数字型相加的时候,true的值为1,false的值为0
console.log(true + 1);//2
console.log(false + 1);//1
Null 和 Undefined
Null类型的值只有一个,就是null,null这个值专门用来表示一个为空的对象,使用typeof检查null值时,会返回object
Undefined类型的值只有一个,就是undefined,一个声明后没有被赋值的变量会有一个默认值undefined,使用typeof检查undefined值时,会返回undefined
数据类型转换
通俗来讲就是把一种数据类型的变量转换成另外一种数据类型
转换为字符串
方式 | 说明 | 案例 |
---|---|---|
toString() | 转成字符串 | var num = 1;alert(num.toString()); |
String()强制转换 | 转成字符串 | var num = 1;alert(Strinig(num)); |
加号拼接字符串 | 和字符串拼接的结果都是字符串 | var num = 1;alert(num + “我是字符串”); |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
//1.把数字型转换为字符串型 变量.toString()
var num = 10;
var str = num.toString();
console.log(str);
console.log(typeof str);
//2.我们利用String(变量)
console.log(String(num));
//3.利用 + 拼接字符串的方法实现转换效果
console.log(num + '');
</script>
</head>
<body>
</body>
</html>
转换为数字型(重点)
方式 | 说明 | 案例 |
---|---|---|
parseInt(string)函数 | 将String类型转换成整数数值型 | parseInt(‘78’) |
parsFloat(string)函数 | 将String类型转换成浮点数数值型 | parseFloat(‘78.26’) |
Number()强制转换函数 | 将String类型转换为数值型 | Number(‘12’) |
js隐式转换(- * /) | 利用算术运算隐式转换为数值型 | ‘12’ - 0 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
//1.parseInt(变量) 可以把 字符型转换为数字型 得到的是整数
console.log(parseInt('3.14'));//3 取整
console.log(parseInt('3.94'));//3 取整
console.log(parseInt('120px'));//120 会去掉这个px单位
console.log(parseInt('rem120px'));//NaN
//2.parseFloat(变量) 可以把字符型转换为数字型 得到的是小数 浮点数
console.log(parseFloat(3.14));
console.log(parseFloat('120px'));//120 会去掉这个px单位
console.log(parseFloat('rem120px'));//NaN
//3.利用Number(变量)
var str = '123';
console.log(Number(str));
console.log(Number('12'));
//4.利用了算术运算 - * / 隐式转换
console.log('12' - 0);//12
console.log('123' - '120');
</script>
</head>
<body>
</body>
</html>
简单加法器案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
//先弹出一个输入框,提示用户输入第一个值,保存起来
//再弹出一个输入框,提示用户输入第二个值,保存起来
//把这两个值相加,并将结果赋给新的变量(注意数据类型转换)
//弹出警示框(alert),把计算的结果输出
var num1 = prompt('请您输入第一个值:');
var num2 = prompt('请您输入第二个值:');
var result = parseFloat(num1) + parseFloat(num2);
alert('您的结果是:' + result);
</script>
</head>
<body>
</body>
</html>
转换为布尔型
方式 | 说明 | 案例 |
---|---|---|
Boolean()函数 | 其他类型转成布尔值 | Boolean(‘true’); |
- 代表空、否定的值会被转换为false,如“、0、NaN、null、undefined
- 其余值都会被转换为true
console.log(Boolean(''));//false
console.log(Boolean(0));//false
console.log(Boolean(NaN));//false
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
console.log(Boolean('小白'));//true
console.log(Boolean(12));//true
String
字符串型可以是引号中的任意文本,其语法为双引号和单引号
var strMsg = "我爱北京天安门~";//使用双引号表示字符串
var strMsg2 = 'WDNMD'; //使用单引号表示字符串
//常见错误
var strMsg3 = 哈哈哈; //报错,没使用引号,会被认为是js代码,但是js没有这些语法
转义符
转义符 | 解释说明 |
---|---|
\n | 换行符,n是newline的意思 |
\ | 斜杠\ |
’ | 单引号‘ |
" | 双引号" |
\t | tab 缩进 |
\b | 空格,b是blank的意思 |
字符串长度
通过字符串的length属性可以获取整个字符串的长度
var strMsg = '我是阿波!';
alert(strMsg.length);//显示5
字符串拼接
//1.1字符串“相加”
alert('hello' + ' ' + 'world');//hello world
//1.2数值字符串”相加“
alert('100' + '100');//100100
//1.3数值字符串 + 数值
alert('11' + 12);//1112
+号总结口诀:数值相加,字符相连
字符串拼接加强
console.log('阿波' + 18); //只要有字符就会相连
var age = 18;
//console.log('阿波age岁啦'); //这样不行哦
console.log('阿波' + age); //阿波18
console.log('阿波' + age + '岁啦'); //阿波18岁啦
运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
% | 取余数(取模) | 返回除去的余数9 % 2 = 1 |
浮点数精度问题
浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数
var result = 0.1 + 0.2; //结果不是0.3,而是:0.30000000000000004
console.log(0.7 * 100); //结果不是7,而是:7.000000000000001
所以不要直接判断两个浮点数是否相等
<script type="text/javascript">
//浮点数 算术运算里面会有问题
//我们不能直接拿着浮点数来进行相比较 是否相等
var num = 0.1 + 0.2;
console.log(num == 0.3);//false
</script>
递增和递减运算符
前置递增运算符
++num 前置递增,就是自加1,类似于num = num + 1,但是 ++num 写起来更简单
<script type="text/javascript">
//1.想要一个变量自己加1 num = num + 1 比较麻烦
var num = 1;
num = num + 1;//++num
console.log(num);//2
//2.前置递增运算符 ++ 写在变量的前面
var age = 10;
++age;
console.log(age);//11
//3.先加1 后返回值
var p = 10;
console.log(++p + 10);//21
</script>
后置递增运算符
num++ 后置递增,就是自加1,类似于num = num + 1,但是 num++ 写起来更简单
使用口诀:先返回原值,后自加
<script type="text/javascript">
var num = 10;
num++;// num = num + 1 ++num;
//前置自增和2后置自增如果单独使用 效果是一样的
var age = 10;
console.log(age++ + 10);//20
//这里age = 11
</script>
总结
- 后置:先原值运算,后自加(先人后己)
- 前置:先自加,后运算(先己后人)
- 开发时,大多使用后置递增/减,并且代码独占一行,例如:num++ 或者 num–;
比较运算符
比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true/false)作为比较运算的结果
运算符名称 | 说明 | 案例 | 结果 |
---|---|---|---|
< | 小于号 | 1 < 2 | true |
> | 大于号 | 1 > 2 | false |
>= | 大于等于号(大于或者等于) | 2 >= 2 | true |
<= | 小于等于号(小于或者等于) | 3 <= 2 | false |
== | 判等号 | 37 == 37 | true |
!= | 不等号 | 37 != 37 | false |
=== !== | 全等 要求值和数据类型都一致 | 37 === ‘37’ | false |
<script type="text/javascript">
//1.程序里面的等于符号是 == 默认转换数据类型 会把字符串型的数据转换为数字型 只要求值相等就可以
console.log(3 == 5)//false
console.log('阿波' == '波波');//false
console.log(78 == 78);//true
console.log(78 == '78');//true
console.log(78 != 78);//false
//2.程序里面有全等 一模一样 要求 两侧的值 还有 数据类型完全一致才可以true
console.log(18 === 18);//true
</script>
符号 | 作用 | 用法 |
---|---|---|
= | 赋值 | 把右边给左边 |
== | 判断 | 判断两边值是否相等(注意此时有隐式转换) |
=== | 全等 | 判断两边的值和数据类型是否完全相同 |
逻辑运算符
逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。
逻辑运算符 | 说明 | 案例 |
---|---|---|
&& | “逻辑与”,简称 “与” and | true && false |
|| | “逻辑或”,简称 “或” or | true || false |
! | “逻辑非”,简称 “非” not | ! true |
逻辑与&&:两边都是true才返回true,否则返回false
逻辑或||:两边都为false才返回false,否则都为true
逻辑非!:也叫取反符,用来取一个布尔值相反的值,如true的相反值是false
var isOk = !true;
console.log(isOk);//false
短路运算(逻辑中断)
当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值
逻辑与
如果第一个表达式的值为真,则返回表达式2
如果第一个表达式的值为假,则返回表达式1
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
//1.用我们的布尔值参与的逻辑运算 true && false == false
//2.123 && 456是值 或者是 表达式 参与逻辑运算?
//3.逻辑与短路运算 如果表达式1为真 则返回表达式2 如果表达式1为假的 返回表达式1
console.log(123 && 456);//456
console.log(0 && 456);//0
console.log(0 && 1 + 2 && 456 * 56789);//0
console.log('' && 1 + 2 && 456 * 56789)//''
//如果有空的或者否定的为假 其余是真的 0、''、null、undefined、NaN
</script>
</head>
<body>
</body>
</html>
逻辑或
如果表达式1为真,则返回表达式1
如果表达式1为假,则返回表达式2
console.log(123 || 456);//123
console.log(0 || 456);//456
console.log(123 || 456 || 789);//123
赋值运算符
赋值运算符 | 说明 | 案例 |
---|---|---|
= | 直接赋值 | var usrName = ‘我是值’ |
+=、-= | 加、减一个数 后再赋值 | var age = 10;age += 5; //15 |
*=、/=、%= | 乘、除、取模 后再赋值 | var age = 2; age *= 5; //10 |
var age = 10;
age += 5;//相当于 age = age + 5
age -= 5;//相当于 age = age - 5
age *= 10;//相当于 age = age * 10
运算符优先级
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++ – ! |
3 | 算术运算符 | 先 * / % 后 + - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先 && 后 || |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
流程控制
流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构
顺序流程控制
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行
分支结构
由上到下执行代码的过程中,根据不同条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
JS提供了两种分支结构语句:if语句 和 switch语句
if分支语句
// 语法结构:
// 条件成立执行代码,否则什么也不做
if(条件表达式) {
执行语句
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
var year = prompt('请输入年龄');
if(year >= 18) {
alert('允许进入网吧');
}
</script>
</head>
<body>
</body>
</html>
if else语句(双分支语句)
// 语法结构:
// 条件成立执行if里面的代码,否则执行else里面的代码
if(条件表达式) {
//if条件成立执行的代码
} else {
//否则 执行的代码
}
<script type="text/javascript">
var age = prompt('请输入年龄');
if(age >= 18) {
alert('我带你去网吧偷键盘');
} else {
alert('滚!回家做作业去!');
}
</script>
判断闰年
<script type="text/javascript">
var year = prompt('请输入一个年份');
if(year % 4 == 0 & year % 100 != 0) {
alert('闰年');
} else {
alert('平年');
}
</script>
if else if 语句(多分支语句)
// 语法结构:
// 适合检查多重条件
if(条件表达式1) {
语句1;
} else if (条件表达式2