JavaScript
概念:一门客户端脚本语言
- 运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎
- 脚本语言:不需要编译,直接就可以被浏览器解析执行了
功能:
*可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。
JavaScript发展史:
- 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名:C–,后来更名为:ScriptEase。
- 1995年,Netscape(网景)公司:开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名JavaScript。
- 1996年,微软抄袭JavaScript开发出Jscrip语言
- 1997年。ECMA(欧洲计算机制造商协会),ECMAScript,就是所有客户端脚本语言的标准。
JavaScript = ECMAScript + JavaScript特有的东西(BOM+DOM)
ECMAScript:客户端脚本语言的标准
1.基本语法:
(1)与html结合方式
- 1.内部JS:
定义<script>
,标签体内容就是js代码 - 2.外部JS:
定义<script>
,通过src属性引入外部的js文件
注意:
1.<script>
可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。
2.<script>
可以定义多个。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS与html结合方式</title>
<!--内部JS-->
<script>
alert("HelloWorld");
</script>
<!--外部JS-->
<script src="js/a.js"> </script>
</head>
<body>
<input type="text">
</body>
</html>
(2)注释
- 1.单行注释://注释内容
- 2.多行注释:/注释内容/
(3)数据类型:
1.原始数据类型(基本数据类型)
- 1)number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型)
- 2)string:字符串。字符串 “abc” “a” ‘abc’
- 3)boolean:true和false
- 4)null:一个对象为null的占位符
- 5)undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
2.引用数据类型:对象
(4)变量
变量:一小块存储数据的内存空间
Java语言是强类型语言,而JavaScript是弱类型语言
- 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
- 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以定义任意类型的数据。
语法:
- var(let) 变量名 = 初始化值;
- typeof运算符:获取变量的类型
- 注:null运算后得到的是object
(5)运算符
1.一元运算符 :只有一个运算数的运算符
- ++,–,+(正号) +3
- ++ – 自增(自减)
- ++,-- 在前,先自增(自减),再运算
- ++,-- 在后,先进行运算,再自增(自减)
- +,- 正负号:
注意:在JS中,如果运算数不是运算符所要求的类型,那么JS引擎会自动的将运算数进行类型转换。
其他类型转number:
- string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)
- boolean转number:true转为1,false转为0
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>一元运算符</title>
<script>
/*
1.一元运算符 :只有一个运算数的运算符
++,--,+(正号) +3
++ -- :自增(自减)
++,-- 在前,先自增(自减),再运算
++,-- 在后,先进行运算,再自增(自减)
*+,-:正负号:
注意:在JS中,如果运算数不是运算符所要求的类型,那么JS引擎会自动的将运算数进行类型转换
*其他类型转number
*string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)
*boolean转number:true转为1,false转为0
*/
let num =3;
let a = num++;
document.write(num); //4
document.write(a); //3
let num2 =3;
let b = ++num2;
document.write(num2); //4
document.write(b); //4
document.write("<hr>")
let c = +"123";
// alert(typeof(c))
alert(c+1); //124
let d = +"12adb";
alert(typeof(d)) //number
alert(d+1) //NaN
let flag = +true;
let f2 = -false;
document.write(typeof(flag)+"<br>"); //number
document.write(flag+"<br>"); //1
document.write(f2+"<br>"); //0
document.write("<hr>");
</script>
</head>
<body>
</body>
</html>
2.算术运算符
+ - * /
3.赋值运算符
=,+= ,-=
4.比较运算符
> < >= <= == ===(全等于)
比较的方式
- 1.类型相同
- 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
- 2.类型不同:先进行类型转换,再去比较
- ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>比较运算符</title>
<script>
let a = 3;
let b = 4;
/*
比较运算符
*比较的方式
1.类型相同
*字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
2.类型不同:先进行类型转换,再去比较
*===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
*/
document.write((3 > 4)+"<br>"); //false
document.write(("abc" < "acd")+"<br>"); //true
document.write(("123" == 123)+"<br>"); //true
document.write(("123" === 123)+"<br>"); //false
</script>
</head>
<body>
</body>
</html>
5.逻辑运算符
&& || !
&&:与(短路)
||:或(短路)
!:非
其他类型转boolean
- 1.number:0或NaN为假,其他为真
- 2.string:除了空字符串(""),其他都是true
- 3.null&undefined:都是false
- 4.对象:所有对象都是true
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>比较运算符</title>
<script>
let a = 3;
let b = 4;
/*
* 逻辑运算符
* &&:与(短路)
* ||:或(短路)
* !:非
* *其他类型转boolean
* 1.number:0或NaN为假,其他为真
* 2.string:除了空字符串(""),其他都是true
* 3.null&undefined:都是false
* 4.对象:所有对象都是true
*/
let flag=true;
document.write(flag+"<br>"); //true
document.write(!flag+"<br>"); //false
document.write("<hr>");
//number
let num=3;
let num2 = 0;
let num3 = NaN;
document.write(!!num+"<br>"); //true
document.write(!!num2+"<br>"); //false
document.write(!!num3+"<br>"); //false
/* while (1){
}*/
document.write("<hr>");
//string
let str1="abc";
let str2 = "";
document.write(!!num+"<br>"); //true
document.write(!!num2+"<br>"); //false
document.write("<hr>");
//null&undefined
let obj=null;
let obj2;
document.write(!!obj+"<br>"); //false
document.write(!!obj2+"<br>"); //false
document.write("<hr>");
//object
let date = "123";
document.write(!!date+"<br>"); //true
document.write("<hr>");
/**
* js中可以这样定义,简化书写。
* @type {string}
*/
let obj= "123";
if (obj !=null&& obj.length> 0){ //防止空指针异常
alert(123)
}
if (obj){ //防止空指针异常
alert(111)
}
</script>
</head>
<body>
</body>
</html>
6.三元运算符
?: 表达式
<script>
let a = 3;
let b = 4;
let c = a > b?1:0;
alert(c);
</script>
语法:
表达式?值1:值2
判断表达式的值,如果是true则取值1,如果是false则取值2;
(6)流程控制语句:
1.if…else…
2.switch
- 1)在java中,switch语句可以接收的数据类型:byte,int,short,char,枚举(1.5),String(1.7)
switch(变量){
case 值:
} - 2)在JS中,Switch什么类型都可以
3.while
4.do…while
5.for
(7) JS特殊语法
- 1.语句以分号;结尾,如果一行只有一条语句,则;可以省略(不建议)
- 2.变量的定义使用let关键字,也可以不使用
用let:定义的变量是局部变量
不用:定义的变量是全局变量(不建议)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>特殊语法</title>
<script>
//1.语句以分号;结尾,如果一行只有一条语句,则;可以省略(不建议)
let a = 3;
// alert(a);
/*
* 2.变量的定义使用var(let)关键字,也可以不使用
* *用var(let):定义的变量是局部变量
* *不用:定义的变量是全局变量(不建议)
* */
/*var b = 4; //局部变量
alert(b);
c = 5; //全局变量
alert(c);*/
var b;
function fun() {
b = 4;
}
fun();
alert(b);
</script>
</head>
<body>
</body>
</html>
(8)练习:99乘法表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>99乘法表</title>
<style>
td{
border: 1px solid;
}
</style>
<script>
document.write("<table align='center'>");
//1.完成基本的for循环,展示乘法表
for (let i=1;i<= 9; i++){
document.write("<tr>"); //行
for(let j = 1;j <= i;j++){
document.write("<td>");
//输出 1 * 1 = 1
document.write(i+" * "+j+" = "+i*j+" ");
document.write("</td>");
}
/* //输出换行
document.write("<br>")*/
document.write("</tr>")
}
//2.完成表格的嵌套
document.write("</table>");
</script>
</head>
<body>
</body>
</html>