JavaScript
文章目录
1.初识JavaScript
1.1什么是JavaScript
JavaScript是一门世界上最流行的脚本语言
Java和JavaScript事实上并没有什么太大的联系。
1.2历史
10天被发布出来
ECMAScript它可以理解为是JavaScript的一个标准
最新版本已经到es6版本
但是大部分浏览器还只能支持es5!
2.快速入门
2.1引入JavaScript
1.内部标签
<script>
......
</script>
2.外部引入:
和CSS的外部引入类似,JavaS.js是单独写JS的代码页
<script src="JS/JavaS.js"></script>
2.2基本语法入门
JavaScript的语法和Java大致相同,只是JavaScript没有那么严谨而已。
“var”用于定义变量,不同Java的是不管什么类型的变量在这里都不用区分,直接var定义。
alert是弹窗提示信息。
console.log是打印信息,但你需要在浏览器的控制台才能查看结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var num = 1;
var zc = "ad";
alert(num);
if (2>1){
alert(zc);
}
var abc = "xu";
console.log(abc);
</script>
</head>
<body>
</body>
</html>
但JavaScript需要在浏览器中多多调试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTiHrZtF-1603527330842)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20201010161701506.png)]
2.3数据类型
数值,文本,图形,音频,视频…
变量
var a = '王者荣耀';
numbe
如上所述,JavaScript并没有那么严谨,整数和小数都是一样的。
123 //整数
123.1 //浮点数
1.123e3 //科学计数法
-99 //负数
NaN //not a number
Infinity //表示无限大
字符串
差不多的…
布尔值
true, false
逻辑运算
&& 两个都为真,结果为真
|| 一个为真,结果为真
! 否定
比较运算符
= 赋值
== 等于(即使类型不同,但值相同则判断为true)
=== 绝对等于(类型和值都需要一样,为true)
尽量使用===
另外:
NaN===NaN是false,它与所有的数值都不相等,包括自己;
只能通过isNaN(NaN)来判断这个数是否为NaN
浮点数问题:
console.log((1/3)===(1-2/3));
这个也是false,尽量避免使用浮点数,有精度问题。
null和undefined
null空
undefined未定义
数组
Java中是一系列相同类型的对象,但JavaScript不是
var arr = [1,2,3,4,5,'hello',null,true];
new Array(1,2,15,'hello');
若取数组下标越界则会
undefined
对象
对象是大括号,数组是中括号
创建一个对象:
var person = {
name:"xu",
age:3,
tags:['js','java','web','...']
}
属性之间用逗号隔开,最后一个不需要添加。
取值时,仍是在浏览器的控制台取值:
person.name
>"xu"
person.age
>3
person.tags
>Array(4) [ "js", "java", "web", "..." ]
2.4严格检查格式
这里就简单介绍一下吧,关于变量的定义大致有这样三种方式:
var,let还有const;
var声明全局变量或函数级变量,其定义的变量是可以正常修改的,不初始化值的话,运行的时候会输出undefined。
let声明块级的变量,且不能重复声明变量。
const具有上述let的特点但不同的是const声明的变量必须赋值。
所以接下来就可能出现一些问题。由于var是全局变量,那么很有可能在一个网页中其他地方声明了和var声明的相同的变量,这时就会出现混乱。所以为了避免这种情况的发生,有这样的一种格式可以帮我们运行程序时检测一些不规范的地方。
"use strict";
当你输入该代码时,就会进入一个更为严谨的运行环境当中。它会建议你使用let去定义一些变量而不是var。
并且在使用该格式之前,你会发现单单的这样一句话居然也能成功的定义并赋值一个变量,且在控制台中正常输出。
i = 1;
这显然并不严谨,所以使用"use strict"格式就可以很好地避免这种情况的发生。
3.数据类型
3.1字符串
1.正常字符串可以用 单引号或者双引号 包裹打印出
2.转义字符可以打出特殊字符或其他作用
\'' 打印出''
\n 换行
\t 空格
\u4e2d Unicode字符,这里会输出汉字“中”
\x41 Ascll字符,这里会输出“A”
3.多行字符串编写
var msg = `这个符号
可以多行
输入
且同样多行输出
`
console.log(msg);
这个``键,是在Tab键上面,Esc键下面的那个键。
4.模板字符串
let msg = '+额外输出内容';
let age = `3岁${msg}`;
console.log(age);
这里的“${}”符号可以使大括号里面的内容加到age里面,使其变成age的内容,和“+”差不多。但这里需要注意,必须要用``键来执行这个操作,否则不会成功。
5.输出字符串
输出字符串的长度:
var name = `student`;
console.log(name);
console.log(name.length);
输出字符串的第三位字符:
console.log(name[2]);
输出大写字符串(方法):
console.log(name.toUpperCase())
输出小写字符串(方法):
console.log(name.toLowerCase())
输出第一个出现的字符的下标:
console.log(name.indexOf('n'))
从第3个字符截取到第6个字符:
console.log(name.substring(2,5))
3.2数组
数组仍然是直接定义,且直接打印
var ayy = [1,2,3,4,5,6]
console.log(ayy)
或者ayy
打印长度
ayy.length
修改某元素的值
ayy[2] = 99
若定义数组之后,修改数组的大小
修改偏大时,多余的位置将被设置为未定义undefined
ayy.length=10
Array(10) [ 1, 2, 99, 4, 5, 6, <4 empty slots> ]
ayy[8]
undefined
修改偏小时,多余的元素将被删除
ayy.length=2
Array [ 1, 2 ]
此次是获取元素值为“2”的数组下标
ayy.indexOf(2):
1
ayy.slice(),截取
ayy.slice(2) = [3,4,5,6]
ayy.slice(4) = [5,6]
ayy.slice(1,4) = [2,3,4]
slice(),当括号内只含单个数字x时,会将数组前x个元素舍掉,打印出余下的数组元素。
当括号内含两个数字时(x,y)时,会将前x个元素,y后面的(不包括y)元素舍掉,打印出余下的数组元素。
push(),pop(),unshift(),shift()
ayy.push(`a`,`b`)在尾部添加某某元素
Array(8) [ 1, 2, 3, 4, 5, 6, "a", "b" ]
ayy.pop()在尾部删除一个元素
Array(7) [ 1, 2, 3, 4, 5, 6, "a"]
ayy.pop()
Array(6) [ 1, 2, 3, 4, 5, 6]
ayy.unshift(`a`,`b`)
Array(8) [ "a","b",1, 2, 3, 4, 5, 6]
ayy.shift()
Array(7) [ "b",1, 2, 3, 4, 5, 6]
ayy.shift()
Array(6) [ 1, 2, 3, 4, 5, 6]
sort()排序和reverse()颠倒
var arr = ["A","B","D","C"]
arr.sort()
Array(4) [ "A", "B", "C", "D" ]
arr.reverse()
Array(4) [ "D", "C", "B", "A" ]
这里需要注意的是:
sort()是按照字符编码(ASCII)的顺序进行排序,并且为了实现这一点它还会把数组的元素都转换成字符串。谨慎使用。
reverse() 方法用于颠倒数组中元素的顺序。
concat()和join()
arr.concat(["A","AD"])
Array(6) [ "D", "C", "B", "A", "A", "AD" ]
arr
Array(4) [ "D", "C", "B", "A" ]
arr.join('~')
"D~C~B~A"
arr
Array(4) [ "D", "C", "B", "A" ]
concat()方法用于连接两个或多个数组。但它只会返回一个新的数组,并不会改变原有的数组。
join()指定你给出的字符,并用这个字符把数组内的元素连接起来,而非原来的逗号。只会返回一个新的字符串,并不会改变原有的数组。
多维数组:
arr = [[1,2,3],[4,5,6],[7,8,9]]
0: Array(3) [ 1, 2, 3 ]
1: Array(3) [ 4, 5, 6 ]
2: Array(3) [ 7, 8, 9 ]
arr[2][0] //查找第3列第一个元素
7
3.3对象
JavaScript创建对象。
var 对象名 ={
属性名:属性值,
属性名:属性值,
属性名:属性值
}
多个属性之间用逗号隔开,最后一个属性不加逗号!
var person = {
name: "Xu AN Jie",
age: 3,
email: "24736743@qq.com",
score: 0
}
1.对象赋值
person.name = "Xu"
"Xu"
2.可以使用一个不存在的对象属性,不会报错!
person.lala
undefined
3.动态的增删属性。
可以随时增加或减少对象的属性:
delete是删除属性:
delete person.score
true
person
Object { name: "Xu AN Jie", age: 3, email: "24736743@qq.com" }
可以直接增加属性:
person.baba = "NA"
"NA"
person
Object { name: "Xu", age: 3, email: "24736743@qq.com", baba: "NA" }
4.判断属性值是否存在于这个对象中: xxx in xxx
'name' in person
true
'toString' in person
true
5.判断对象是否包含这个自定义属性而不是原型链上的属性:
person.hasOwnProperty('name')
true
person.hasOwnProperty('toString')
false
”hasOwnProperty“()和 “…in…”的区别在于前者只会查找你自己定义的属性,而不会查找自带的属性。
3.4流程控制
if判断
var age = 3;
if (age == 3){
console.log("Yes!");
}
if (age < 3){
console.log("No!");
}
if (age > 3){
console.log("Too Big!");
}
while循环
while(age<100){
age = age + 1;
console.log(age);
}
do {
age++;
console.log(age);
}while (age<10)
for循环
for (let i = 0; i < 10; i++) {
console.log(i);
}
forEach循环
forEach()函数从头到尾把数组遍历一遍。
age.forEach(function (o,p,q){
console.log(o,p,q);
})
1 0 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
2 1 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
3 2 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
4 3 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
5 4 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
6 5 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
7 6 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
8 7 Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]
//可以看出,function (o,p,q)中的第一个参数o是数组元素的值,第二个参数p是数组下标,第三个参数q就是整个数组本身。
age.forEach(function (p){
console.log(p);
})
1
2
3
4
5
6
7
8
//假如function()中你只填写一个参数的话,那么这个参数代表的就是数组元素的值。
for…in循环
for (变量 in 数组)
{
在此执行代码
}
var abc = ["A","B","C","D","E","F"]
for(var num in abc){
console.log(num)
}
0
1
2
3
4
5
//这表示,for(变量 in 对象)的变量接收的是数组的索引(下标)
3.5Map和Set
Map:
var map = new Map([[`tom`,100],[`jack`,99],[`Rose`,80]]);
//定义Map
var name = map.get(`tom`);
console.log(name);
//获取元素并打印
map.set(`AnJie`,99);
//增加元素
map.delete(`tom`);
//删除元素元素
Set:不会显示重复的元素
var set = new Set([3,1,2,4,2,1,2,1,1,1]);
//定义Set
set.add(10);
//增加元素
set.delete(3);
//删除元素
console.log(set.has(1));
//判断set是否含有某元素
3.6iterator
…of…遍历所有元素的值
//数组遍历
var arr = [3,4,5]
for (let x of arr){
console.log(x)
}
//数组遍历
var map = new Map([[`Xu`,99],[`An`,98],[`Jie`,100]]);
for (let x of map){
console.log(x)
}
//数组遍历
var set = new Set([99,98,97,77])
for (let x of set){
console.log(x)
}
4.函数
4.1定义函数
定义一个绝对值函数,方法1:
function abs(x){
if (x>=0){
return x;
}else {
return -x;
}
}
方法2:
var abs = function(x){
if (x>=0){
return x;
}else {
return -x;
}
}
abs(10)=10
abs(-10)=10
arguments会将实际输入所有的参数接收为数组。
这里你只定义了一个,但arguments可以将你输入的参数全部接收
var abs = function(x){
console.log("x->"+x);
for (var i = 0;i<arguments.length;i++){
console.log(arguments[i]);
}
}
abs(1,2,3,4)
x->1
1
2
3
4
rest和arguments大致相同,可以把rest理解为arguments的升级版
var abs = function(x,y,...rest){
console.log(`x->`+x);
console.log(`y->`+y);
console.log(rest);
}
abs(1,2,4,456,456,456)
x->1
y->2
Array(4) [ 4, 456, 456, 456 ]
这次先到这里…