JavaScript
js是一门脚本语言,也是一门编程语言
- 脚本:不需要像java语言,需要编译,然后运行。只需要写完代码,然后就可以直接解析运行了。
在中国的古代,唱戏的人称为戏子,每个人手里都拿着脚本,戏子看到脚本就知道上台演什么戏,接下来该做哪些动作,js称为脚本,就说浏览器看到js写的代码,就知道要做什么事情了。
js需要用浏览器解析执行,浏览器里面自带js解析引擎
js既然是编程语言,所以里面也有逻辑算法,也有一些基础语法。
比如说有变量,常量,数据类型,各种运算符,数组,方法,对象…
- JavaScript=ECMAScript(js的基础语法)+BOM(浏览器对象模型)(是js特有的)+DOM(文档对象模型)
注意:JavaScript和Java没有任何关系,但是语法高达99%的相似度,所以我们在学习JS的时候,99%已经会了,只需要重点学习1%不一样的地方即可。
js的作用
可以让页面动起来
js的引入方式
- 内部编写
在html中写一个script标签,在script标签中写js代码
<head>
<script>
js代码
</script>
</head>
外部引入
新建一个js为后缀名的文件
写js代码
在html中的head中写一个标签,叫做script
<script src="aaa.js"></script>
注意:
script标签是可以写在任意位置的
- script标签可以写多个
- 因为html文件是浏览器按照自上而下的顺序去解析的,所以如果有多个script标签的话,是按照顺序执行
ECMAScript(js的基础语法)
变量,常量,数据类型,各种运算符,数组,方法,对象
- alert(内容):在浏览器上弹出对话框
- document.write(内容):在浏览器上显示出内容
注释
1.单行注释://内容
2.多行注释:/*内容*/
3.文档注释:/**内容*/
1.单行注释://内容
2.多行注释:/*内容*/
数据类型
- Java中的数据类型分类2大类4小类8小种
- 基本数据类型:
- 整型:byte,short,int,long
- 浮点型:float,double
- 字符型:char
- 布尔型:boolean
- 引用数据类型:
- jdk自带的:String,Integer,ArrayList,…
- 自定义:Student,Person,Pig,…
- JS中的数据类型
- 原始数据类型(基本数据类型):
- number:小数,整数,NaN(NotaNumber)
- string:字符串,要用单引号或者双引号括起来
- boolean:true/false
- null:
- Java中的null是一个常量值,专门给引用数据类型赋值的
- JS中的null既是数据类型,也是值
- undefined:既是数据类型,也是值
- 引用数据类型:
- 各种引用数据类型:String,Date,Math…
常量
- Java中的常量
- 字面值常量:
- 整数常量
- 小数常量
- 字符串常量
- 字符常量
- 空常量
- 布尔常量
- 自定义常量:
- 被final修饰的就是自定义常量
finalinti=12;
- JS中的常量
- 字面值常量
- 自定义常量
consti=12;(const可以看成是final)(js是弱类型语言,所以不需要加数据类型)
变量
- Java中的变量
- Java是强类型的语言
- 在内存空间中,会给变量开辟一块内存空间,空间的名字就是我们起的变量名,空间里存储的数据的数据类型,是我们定义好的数据类型,空间中存储的数据,就是我们给的数据。
- 格式:数据类型变量名=数据;
int i = 12;
- JS中的变量
- JS是弱类型的语言
- 在内存空间中,会给变量开启一块内存空间,空间的名字就是我们起的变量名,但是并没有给该空间赋予数据类型,空间依然可以存储数据,而且是任何类型的数据。
- 格式:var变量名=数据;
var i = 12;
注意:可以使用typeof来查看变量的真实的数据类型
- 写法一:typeof变量名
- 写法二:typeof(变量名)
- let关键字和var关键字的区别
- var所定义的变量是全局变量
- let所定义的变量就正常变量,可以省略不写,默认是let,但是最好还是写上
运算符
算术运算符
+,-,*,/,%,++,—
/:除和java不一样
Java中的除号:
int i = 1;
int j = 2;
System.out.println(i / j); //0
整数/整数=整数
小数/整数=小数
整数/小数=小数
小数/小数=小数JS中的除号:
let i = 1;
let j = 2;
alert(i / j); //0.5
除完之后的结果是多少就是多少
+
Java中的加号
- 加减乘除的加
- 正负的正
- 字符串连接符
JS中的加号
- 加减乘除的加
- 正负的正
- 字符串连接符
- 转换符
做转换符时的情况
string->number
数字格式字符串
let a = "123";
let b = +a + 12;
alert(b);//135
alert(typeof b);//number
非数字格式字符串
let a = "abc";
let b = +a + 12;
alert(b);//NaN
alert(typeof b);//number
boolean->number
如果是true,转换成数字,为1
如果是false,转换成数字,为0
++,—
let a = 10;
let b = ++a + --a + a-- + a++;
alert(b);//40
赋值运算符
=,+=,-=,/=…
和Java中一样
比较运算符
,<,>=,<=,!=,==,===
==
- Java中== ```java int i = 1; int j = 2; System.out.println(i == j);//false
int a = 12; String b = “12”; System.out.println(a == b);//编译报错
2. JS中的==
```java
let i = 1;
let j = 2;
alert(i == j);//false
----------------------------------
let a = 12;
let b = "12";
alert(a == b);//true
js中的==比较的两个数据的结果是不是一样的
----------------------------------
let a = 12;
let b = "12";
alert(a === b); //
js中的===比较的是两个数据的结果和数据类型一不一样
>,<
- Java中的比较 ```java int i = 1; int j = 2; System.out.println(i > j);//false
String i = “a”; String j = “b”; System.out.println(i > j);//编译报错
2. JS中的比较
```java
int i = 1;
int j = 2;
System.out.println(i > j);//false
----------------------------------
let i = "bb";
let j = "ba";
alert(i > j);//true 比的是字典顺序,b与b比,b与a比
字符串用比较运算符比较,按照字典顺序
逻辑运算符
&&,||,!
和Java中一样
注意:在js中不要用|或&即可
三元运算符
和Java中一样
条件表达式?表达式1:表达式2;
- Java中的三元运算符 ```javascript 1 > 2 ? 1 : 2;//编译报错,因为没有接收或者没有直接打印
int max = 1 > 2 ? System.out.println(1) : System.out.println(2); //三元不能为输出语句,因为三元运算符既然是个运算符,就必须有结果
2. JS中的三元运算符
```javascript
1 > 2 ? 1 : 2;
1 > 2 ? alert(1) : alert(2);
流程控制语句
if…else,switch,for,while…
和Java中一样
if…else
- Java中的if…else ```javascript if(条件表达式) {
} else {
}
条件表达式只能是boolean类型的数据,要么是true,要么是false
2. JS中的if...else
```javascript
if(条件表达式) {
} else {
}
条件表达式可以为任意类型
只有值为false,0,NaN,””,null,undefined为false之外,其余都是true
switch
Java中的switch
switch(表达式) {
case 取值1:
xxxooo;
break;
case 取值1:
xxxooo;
break;
default:
xxxoool;
break;
}
表达式的数据类型:byte,short,int,char,String,枚举
JS中的switch ```javascript switch(表达式) { case 取值1: xxxooo; break; case 取值1: xxxooo; break; default: xxxoool; break; }
表达式可以为任意类型
<a name="baPaE"></a>
# 函数(方法)
1. Java中的方法
```javascript
定义格式:
修饰符 返回值类型 方法的名字(形参) {
方法体内容;
return 返回值;
}
public int getSum(int i, int j) {
return i + j;
}
调用:
int sum = getSum(1,2);
System.out.println(sum);
- JS中的方法
在js中,方法有不同的含义,它可以表示一个普通的方法,也可以表示一个对象,也可以表示一个构造器。
对我们来说,我们重点只学习第一种含义,作为普通的方法使用。
定义格式:
格式一:
function 方法名(形参) {
方法体内容;
}
function aaa() {
alert("约吗");
}
格式二:
let 变量名 = function() {
方法体内容;
} //匿名方法
let aaa = function() {
alert("约吗");
}
作为普通方法的使用
情况一:
//定义方法
/* function aaa() {
alert("约吗");
} */
/* let aaa = function() {
alert("滚犊子");
} */
//调用方法
aaa();
情况二:
//定义方法:有参数
function aaa(i, j) {
alert(i + j);
}
//调用方法
aaa(1, 2);
注意:定义方法,如果有形参,数据类型不能写
情况三:
//定义方法:有返回值
function aaa(i, j) {
return i + j;
}
//调用方法
let sum = aaa(1, 2);
alert(sum);
情况四:
//定义方法:
function aaa(i) {
alert(i);//undefined
}
//调用方法
aaa();
---------------------
//定义方法:
function aaa(i) {
alert(i);//12
}
//调用方法
aaa(12,13);
---------------------
//定义方法
function aaa(i) {
//隐藏自带的一个数组:arguments
//alert(arguments.length);
alert(i);
for(let i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}
}
aaa(12,13,14,15,16);
注意:方法的调用,实际参数和形式参数的个数不一样也可以。
作为对象的使用
//作为对象使用
function person() {
}
//给person对象动态绑定一个属性uname,值为tom
person.uname = "tom";
//给person对象动态绑定一个属性age,值为18
person.age = 18;
//给person对象动态绑定一个方法
person.setUname = function(uname) {
this.uname = uname;
}
person.getUname = function() {
return this.uname;
}
person.setAge = function(age) {
this.age = age;
}
person.getAge = function() {
return this.age;
}
alert(person.uname + "..." + person.age);//tom...18
person.setUname("jerry");
person.setAge(19);
alert(person.getUname() + "..." + person.getAge());//jerry...19
作为构造器的使用
//作为构造器
function Person() {
//arguments
//name="方法名"
//prototype:存储键值对容器
}
Person.prototype.name = "tom";
Person.prototype.age = 18;
/* alert(Person.prototype.name);
alert(Person.prototype.age); */
let p = new Person();
alert(p.name + "..." + p.age);
数组
在Java中的数组
int[] arr = new int[5];
int[] arr = {12,13,14,15};
在js中的数组
更像是Java中的集合
定义格式
方式一:
let arr = [12,13,14,15];
方式二:
let arr = new Array(参数1,参数2,...);//传递二个以上代表数组元素
方式三:
let arr = new Array(参数);//传递一个代表数组长度
常见的遍历方法
方式一:普通for遍历
for(let i = 0; i < arr.length; i++) {
document.write(arr[i] + "<br>");
}
方式二:for...in
for(i in arr) {
document.write(arr[i]); //i是索引
}
注意:方式二遍历的数据必须是有效数据。
常见的属性length获取长度。
常见的方法
- join():按照指定的格式对数组元素进行拼接
- pop():删除数组容器中最后一个元素
- push():将尾部添加一个新的元素
对象
Date
处理日期和时间
let date = new Date();
getTime()
toLocaleString()
toLocaleTimeString()
toLocaleDateString()
String
length
charAt()
concat()
Math
abs(x)
ceil(x)
floor(x) //四舍五入
random() // [0,1)
round(x) //将 x 舍入为最接近的整数。
获取1-100之间的随时整数:
x = Math.floor(Math.random() * 100) + 1
Global
这个对象里的方法,不用对象名调用,可以直接使用里面的方法
常见方法:
- encodeURI():对字符串(URI)进行编码
- 在utf-8下,每个汉字占3个字节
decodeURI():对字符串(URI)进行解码
let url = "http://www.woniuxy.com?wd=蜗牛学院";
document.write(encodeURI("<br>" + url))
encodeURIComponent():对字符串(URI)进行编码(包含特殊字符)
decodeURIComponent():对字符串(URI)进行解码(包含特殊字符)
eval():将字符串作为脚本代码来执行
let a = "<br/>";
eval(a); //不对,待考察
isNaN():判断是否是NaN
Let a = NaN;
//判断a变量的值是否是NaN
/* alert(a == NaN);
alert(a === NaN);*/
Let b = isNaN(a);
alert(b);
o
parseInt():可以将数字格式的字符串转换数字,如果字符串中有非数字的字符,那会将字符前面出现的数字转换出来
RegExp正则表达式
正则表达式就是一个字符串,里面是按照一些规则写好的字符串
正则表达式可以帮助我们对表单进行校验
正则表达式
\\ | 反斜线字符 |
---|---|
[abc] | 只满足字母a或字母b字母c中的任意一个 |
[a-zA-Z] | 出现a-z或者A-Z中的任意一个 |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
[0-9] | 任意数字 |
\w | 单词字符,[a-zA-Z_0-9] |
[a-zA-Z_0-9] | 任意字符 |
^ | 行的开头 |
$ | 行的结尾 |
X? | X,零次或一次 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好n次 |
X{n,} | X,至少n次 |
X{n,m} | X,至少n次,但是不超过m次 |
正则表达式的对象的创建方式
方式一:
let reg = new RegExp("正则表达式");
方式二:
let reg = /正则表达式/;
注意:第二种格式中的\不需要写两个,只需要写一个
如何使用
test(要校验的字符串);
练习:写一个正则表达式,能够校验手机号
let reg = new RegExp("^1[358]\\d{9}$"); // \d在字符串里需要转义
let reg= /^1[358]\d{9}$/;