1.介绍
概念:基于对象和事件驱动,并且具有相对安全性的解释型的客户端脚本语言
2.组成
ECMAScript
、DOM
、BOM
3.引入方式
3.1.内嵌式
<script type="text/javascript">
alert("hello world!")
</script>
3.2.外链式
在外部创建js文件,通过src引入
<script type="text/javascript" src="./js/jso1.js">
./ 表示当前项目路径 …/表示当前项目的上级路径
3.3.事件属性
<div onclick="alert('hello world!')">click</div>
3.4.注意
- type是可选属性,可写也可不写
- script标签引入通常写在head或者body结束标签前
- 内嵌式只能被一个文件使用
- 外链式可以被多个文件使用
- 外链式引入不能再在script标签内写js代码,会被引入的js代码覆盖掉
4.输出方式
4.1.网页输出
<script type="text/javascript">
document.write("hello world!")
</script>
4.2.弹框输出
<script type="text/javascript">
alert("hello world!")
</script>
4.3.控制台输出
<script type="text/javascript">
console.log("hello world")
</script>
5.变量
变量:计算机内存分配的一块区域,用来保存变化的数据
5.1.声明变量:
var : 可以重复声明和赋值
let :不能重复声明,可以再次赋值 es6
const:不能重复声明,不能再次赋值 es6
5.2.赋值
- 不声明直接赋值
<script type="text/javascript">
name = 'zs';
age = '10';
console.log(name+"--"+age);
</script>
- 声明后赋值
<script type="text/javascript">
var name = 'zs';
var age = '10';
console.log(name+"--"+age);
</script>
- 同时声明多个变量
<script type="text/javascript">
var name = 'zs',
age = '10';
console.log(name+"--"+age);
</script>
-
定义变量的区别
-
var声明的变量可以重复声明,可以再次赋值,值会被覆盖
<script type="text/javascript"> var name = 'zs'; var name = 'ls'; console.log(name); // ls </script>
-
let声明的变量不能再次声明,可以再次赋值
<script type="text/javascript"> let name = 'zs'; //let name = 'ls'; //抛错: Identifier 'name' has already been declared name = 'ls'; console.log(name); // ls </script>
-
const声明的变量不能再次声明,不能再次赋值
<script type="text/javascript"> const name = 'zs'; //const name = 'ls'; //抛错: Identifier 'name' has already been declared //name = 'ls'; //抛错:Assignment to constant variable. console.log(name); // zs </script>
-
6.数据类型
可以使用关键字typeof
来查看类型
<script type="text/javascript">
console.log(typeof 1);//number
console.log(typeof 0.1);//number
console.log(typeof null);//object
console.log(typeof true);//boolean
console.log(typeof undefined);//undefined
console.log(typeof Symbol());//symbol
console.log(typeof 'hello');//string
</script>
6.1.基本数据类型
- Number:数值类型(int: 整数;float:小数;NaN: not a number;Infinity:除数为0)
- String:字符串,可以用
“ ”
或者''
表示 - Boolean:布尔值,true或者false
- Undefined:未定义,一个变量已经声明,但是还未赋值
- Null:空值,可以给一个变量赋以null来清除变量内容
- Symbol:唯一
6.2.引用数据类型
- Object:对象
7.类型转换
不同数据类型的变量之间运算,需要转换为同一类型!
7.1.强制转换
- 转换为int,只有首字母是数字的才可以转换,其他的为NaN
<script type="text/javascript">
console.log(parseInt('1'));//1
console.log(parseInt('1.111'));//1
console.log(parseInt('1abc'));//1
console.log(parseInt('0.1abc'));//0
console.log(parseInt('abc520'));//NaN
console.log(parseInt(null));//NaN
console.log(parseInt(true));//NaN
console.log(parseInt(undefined));//NaN
console.log(parseInt('hello'));//NaN
</script>
- 转换为float,只有首字母是数字的才可以转换,其他的为NaN
<script type="text/javascript">
console.log(parseFloat('1'));//1
console.log(parseFloat('1.111'));//1.111
console.log(parseFloat('1abc'));//1
console.log(parseFloat('0.1abc'));//0.1
console.log(parseFloat('abc520'));//NaN
console.log(parseFloat(null));//NaN
console.log(parseFloat(true));//NaN
console.log(parseFloat(undefined));//NaN
console.log(parseFloat('hello'));//NaN
</script>
- 转换为Number,只有纯数字字符串的才可以转换,其他的为NaN,true–1,null–0
<script type="text/javascript">
console.log(Number('1'));//1
console.log(Number('1.111'));//1.111
console.log(Number('1abc'));//NaN
console.log(Number('0.1abc'));//NaN
console.log(Number('abc520'));//NaN
console.log(Number(null));//0
console.log(Number(true));//1
console.log(Number(undefined));//NaN
console.log(Number('hello'));//NaN
</script>
- 转为Boolean值,0,false,’’(空字符串),null,undefined, NaN为false,其他都为true
<script type="text/javascript">
console.log(Boolean('1'));//true
console.log(Boolean(0));//false
console.log(Boolean(''));//false
console.log(Boolean('1abc'));//true
console.log(Boolean('0.1abc'));//true
console.log(Boolean('abc520'));//true
console.log(Boolean(null));//false
console.log(Boolean(true));//true
console.log(Boolean(undefined));//false
console.log(Boolean(NaN));//false
</script>
7.2.隐式转换
<script type="text/javascript">
let a = '2',b = '3';
let c = null;
let d = NaN
let e = undefined;
let f = true;
let g = "a";
console.log(a-b) //-1
console.log(a+b)//23 字符串的拼接
console.log(a*c);//0 null--0
console.log(a/e);//NaN
console.log(a/d);//NaN
console.log(a/f);//2 true--1
console.log(a-g);//NaN
</script>
8.运算符
① 算术运算符: + - * / % ++ –
② 比较运算符:== != > >= < <= =(全等于) !(不全等于)
③ 条件运算符:(expr1) ? (expr2) : (expr3)
④ 逻辑运算符:&&(与) ||(或) ! (非)
⑤ 字符串运算符:+
⑥ 赋值运算符: = += -= *= /= %=
8.1.算数运算符
取模运算:%,取余数,除不尽的取后面整数
<script type="text/javascript">
let a = '33';
console.log(a%3);//0
console.log(a%5);//3
</script>
a++:先参与运算,再自增1
++a:先自增1,再参与运算
<script type="text/javascript">
let a = 1,b = 2;
console.log(a++ + 1);//2
console.log(a);//2
console.log(++a +1);//4
console.log(a);//3
</script>
8.2.比较运算符
所有比较的结果都为Boolean值
==(不严格等于): 比较值的大小,不比较值的类型 (比较大小)
===(严格全等于): 既比较值的大小,又比较值的类型.(比较大小,类型)
!=(不等于):结果和==相反
!(不全等于):结果和=相反
<script type="text/javascript">
let a = '1',b = 1;
console.log(a==b);//true
console.log(a===b);//false
console.log(a!=b);//false
console.log(a!==b);//true
</script>
8.3.逻辑运算符
- a&&b(并且):逻辑与,当a和b都为true时,返回值为true,否则返回false
- a||b(或者): 逻辑或,只要a与b中有一个为真,结果为真
- !a(取反):逻辑非,当a为true时,返回值为false,否则返回true
<script type="text/javascript">
let a = '1',b = 0;
console.log(a&b);//0 -- false
console.log(a|b);//1 -- true
console.log(a||b);//1 -- true
console.log(a&&b);//0 --false
console.log(!b);//true
</script>
9.分支
9.1.单分支 if
if(条件A){
代码块B //如果条件A成立(为真),才执行代码块B , 否则不执行
}
<script type="text/javascript">
let flag = true
if(flag){
console.log("hello")
}
</script>
9.2.双分支 if - else
if( 条件A ){
//条件A为真: 执行代码块B,并结束
}else{
//条件A为假: 执行代码块C,并结束
}
<script type="text/javascript">
let flag = true
if(flag){
console.log("hello")
}
else{
console.log("hi")
}
</script>
9.3.多分支 if - else if
if(条件A){
//条件A为真: 执行代码块A,并结束
}esle if(条件B){
//条件B为真: 执行代码块B,并结束
}esle if(条件C){
//条件C为真: 执行代码块C,并结束
}else{
//以上条件都不成立: 执行代码块D
}
let score = prompt("输入成绩", 0);
//判断考试成绩
if (score >= 90) {
console.log("国外旅游");
} else if (score >= 70 && score < 90) {
console.log("国内旅游")
} else if (score >= 60 && score < 70) {
console.log("省内旅游")
} else {
console.log("家里蹲")
}
else可以省略
prompt:提示用户输入的对话框。
9.3.多分支 switch…case
switch(表达式/变量){
case 值1:
全等于值1,执行代码块A;
break;//结束
case 值2:
全等于值2,执行代码块B;
break;
default:
以上都不等于,执行代码块N
break;
}
<script type="text/javascript">
let month = prompt("请输入数字",1)
month = Number(month)
switch (month){
case 1:
alert("春天")
break;
case 2:
alert("夏天")
break;
case 3:
alert("秋天")
break;
case 4:
alert("冬天")
break;
}
</script>
- switch适用于对某个状态值的判断,可以与if - else if 互换
- default可以省略,可以写在case之前或者之后
10.循环
for(初始化循环变量; 循环条件; 更新循环变量){
循环体;
}
-
循环变量的初始值可以是任意值
-
更新循环变量: 步长可以是任意值 可加可减,更新循环变量表达式一定是赋值运算
-
循环条件为真 : 执行循环体
-
循环条件为假 : 结束循环
<script type="text/javascript">
for(let i = 0; i<10 ; i++){
document.write("hello world!");
}
</script>
-
初始化循环变量: let i=0;
-
判断是否满足循环条件:i<10
-
不满足: 结束循环
-
满足: 执行循环体: document.write(“hello world!”);
-
更新循环变量: i++
-
回到第2步
10.1.死循环
循环条件表达式永远为真
<script type="text/javascript">
for(; ;){
console.log("go on...")
}
</script>
10.2.双重嵌套
<script type="text/javascript">
for(let i = 0;i<4;i++){
for(let i = 0;i<5;i++){
document.write("★");
}
document.write("<br>")//换行
}
</script>
10.3.终止循环
- break 终止当前循环和后面所有循环
<script type="text/javascript">
for(let i = 1;i<=10;i++){
if(i===5){
break;
}
console.log(i) //1,2,3,4
}
</script>
- continue 终止当前循环,继续后面的循环
<script type="text/javascript">
for(let i = 1;i<=10;i++){
if(i===5){
continue;
}
console.log(i) //1,2,3,4,6,7,8,9,10
}
</script>
-
i的每个取值就是一次循环 === i从1取到10 所以有10次循环
-
break : 终止了当前循环(i=5),还终止了后面所有循环(i=6-10)
-
continue: 终止了当前循环(i=5), 继续后面的所有循环(i=6-10)
10.4.while 循环
while (条件)
{
需要执行的代码
}
<script type="text/javascript">
let i = 0;
while(i<5){
console.log("hello world:"+i);
i++ ;
}
</script>
只要变量i小于5,循环就会一直执行
10.5.do-while循环
do
{
需要执行的代码
}
while (条件);
<script type="text/javascript">
let i=0;
do{
console.log("hello world"+i);
i++;
}
while(i<5)
</script>
do结构体内优先执行,循环至少会执行一次,即使条件为 false 它也会执行一次