JavaScript

JavaScript基础

概念:客户端脚本语言

运行在客户端浏览器中的 。每一个浏览器都有JavaScript的解析引擎

脚本语言:不需要编译,直接就可以被浏览器解析执行

功能:

可以用来增强用户和HTML页面的交互过程,可以来控制HTML元素,让页面有一些动态的效果,增强用户的体验。

##JavaScript发展史:

1、1992年,Nobase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为:C–,后来更名为:ScriptEase

2、1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来请来SUN公司的专家,修改LiveScript,命名为JavaScript。

3、1996年,微软抄袭JavaScript开发出JScript语言。

4、1997年,ECMA(欧洲计算机制造商协会),ECMAScript,就是所有客户端脚本语言的标准。

JavaScript = ECMAScript + JavaScript自己特有的东西(BOM + DOM)

ECMAScript:客户端脚本语言标准

1、基本语法:

1、与HTML结合方式
1、内部JS:

​ 定义<script>,标签体内容就是js代码

2、外部JS:

​ 定义<script>,通过src属性引入外部的js文件

 	<!--
    内部JS
    外部JS
    -->
    /*内部*/
    <script>
        alert("Hello World");
    </script>
    /*外部*/
    <script src="js/a.js"></script>

​ 注意:

​ 1、<script>可以定义在HTML页面的任何地方。但是定义的位置会影响执行顺序。

​ 2、<script>可以定义多个。

2、注释
1、单行注释://注释内容
2、多行注释:/*注释内容*/
3、数据类型:
1、原始数据类型(基本数据类型):

​ 1、number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型)

​ 2、string:字符串。字符串,没有字符的概念

​ 3、boolean:true或false

​ 4、null:一个对象为空的占位符

​ 5、undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined

    <script>
        //定义变量
        var a = 3;
        alert(a);
        a = "abc";
        alert(a);
        //定义number类型
        var num = 1;
        var num2 = 1.2;
        var num3 = NaN;
        //输出到页面上
        document.write(num+"<br>");
        document.write(num2+"<br>");
        document.write(num3+"<br>");
        document.write(num+"------"+typeof(num)+"<br>");//1------number
        document.write(num2+"------"+typeof(num2)+"<br>");
        document.write(num3+"------"+typeof(num3)+"<br>");
        //定义string类型
        var str = "abc";
        var str2 = 'def';
        document.write(str+"<br>");
        document.write(str2+"<br>");
        document.write(str+"------"+typeof(str)+"<br>");//abc------string
        document.write(str2+"------"+typeof(str2)+"<br>");//def------string
        //定义boolean类型
        var flag = true;
        document.write(flag+"------"+typeof(flag)+"<br>");//true------boolean
        //定义null和undefined类型
        var obj = null;
        var obj2 = undefined;
        var obj3 ;
        document.write(obj+"<br>");
        document.write(obj2+"<br>");
        document.write(obj3+"<br>");
        document.write(obj+"------"+typeof(obj)+"<br>");//null------object
        document.write(obj2+"------"+typeof(obj2)+"<br>");//undefined------undefined
        document.write(obj3+"------"+typeof(obj3)+"<br>");//undefined------undefined
    </script>
2、引用数据类型:对象
4、变量

​ 变量:一小块存储数据的内存空间

​ Java语言是强类型语言,而JavaScript语言是若类型语言

​ 强类型语言:在开辟变量存储空间时,定义了空间将来存储的数据类型。只能存储固定类型的数据。

​ 弱类型语言:在开辟变量存储空间时,不定义空间将来存储的数据类型。可以存储任意类型的数据。

​ 语法:var 变量名 = 初始化值;

5、运算符
1、一元运算符:++、–、+(正号)、-(负号)

注意:在JS中,如果运算数不是运算符所要求的的类型,那么js引擎会自动将运算数进行类型转换。

<script>
    var a = +3;
    alert(a);//3
    var b = +"123";
    alert(typeof(b));//number
    alert(b);//123
    var c = +"abc";
    alert(typeof(c));//number
    alert(c);//NaN
    var d = +"123abc";
    alert(typeof(d));//number
    alert(d);//NaN
    var flag = +true;
    var flag2 = +false;
    alert(typeof(flag));//number
    alert(flag);//1
    alert(flag2);//0
</script>
2、算数运算符:+、-、*、/、%
3、赋值运算符:=、+=、-=、…
4、比较运算符:>、<、>=、<=、=====(全等于)

比较方式:

1、类型相同:直接比较

字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止

2、类型不同:先进行类型转换,再比较

===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false

5、逻辑运算符:&&、||、!

其他类型转boolean:

1、number:0或NaN为假,其他为真

2、string:除了空字符串(“”),其他都是true

3、null&undefined:都是false

4、对象:都是true

if(obj != null && obj.length > 0){//防止空指针异常
   alert(123);
   }
//js中可以这样定义,简化书写
if(obj){//与上面代码等价
   alert(123);
   }
6、三元运算符:? :
6、流程控制语句

1、if…else…

2、switc

在Java中,switch语句可以接受数据类型:byte、int、short、char、枚举(jdk1.5之后)、String(jdk1.7之后)。

在JS中,switch语句可以接受任意的原始数据类型

3、while

4、do…while

5、for

7、特殊语法:

1、语句以;结尾,如果一行只有一条语句,则;可以省略不写(不建议)

2、变量的定义使用var关键字,也可以不使用:

用:局部变量;

不用:全局变量。(不建议)

2、基本对象:

Function:函数对象

1、创建
1、var fun = new Function(形式参数列表,方法体);
2、function 方法名称(形式参数列表){
方法体;
}
3、var 方法名称 = function(形式参数列表){
方法体;
}
2、方法
3、属性
length:代表形式参数的个数
4、特点
1、方法定义时,形式参数的类型不用写,返回值类型也不写
2、方法是一个对象,如果定义名称相同的方法,会覆盖,JS中不存在方法重载,只会被覆盖
3、在JS中,方法的调用只与方法的名称有关,和参数列表无关
4、在方法声明中有一个隐藏的内置对象(数组),argument封装所有的实际参数
5、调用
方法名称(实际参数列表);

//创建方式1
var fun1 = new Function("a","b","alert(a);");
//调用方法
fun1(1,2);//1
//创建方式2
function fun2(a,b) {
    alert(a+b);
}
fun2(1,2);//3
//创建方式3
var fun3 = function(a,b){
    alter(a/b);
};
alert(fun3.length);//2
//fun3(8,2);
//求任意个数的和
function add() {
    var sum = 0;
    for(let i = 0 ; i < arguments.length ; i++){
        sum += arguments[i];
    }
    return sum;
}
alert(add(1,2,3,4,5,6,7,8,9,10));//55
Array:数组对象

1、创建
1、var arr = new Array(元素列表);
2、var arr = new Array(默认长度);
3、var arr = [元素列表];
2、方法
join(参数):将数组中的元素按照指定的分隔符拼接为字符串
push() 向数组的末尾添加一个或更多元素,并返回新的长度
3、属性
length:数组的长度
4、特点
1、JS中,数组元素的类型是可变的
2、JS中,数组长度是可变的

Boolean
Date:日期对象

1、创建
var date = new Date();
2、方法:
tolocaleString():返回当前的date对象对应的时间本地字符串格式
getTime():获取毫秒值。返回当前日期对象描述的时间到1970年1月1日零点的毫秒值差

var date = new Date();
document.write(date+"<br/>");//Wed Mar 31 2021 09:14:35 GMT+0800 (中国标准时间)
document.write(date.toLocaleString()+"<br/>");//2021/3/31上午9:14:35
document.write(date.getTime()+"<br/>");//1617153275426
Math:数学对象

1、创建:
特点:Math对象不用创建,直接使用。 Math.方法名();
2、方法
random():返回0~1之间的随机数。含0不含1
ceil(x):对数进行上舍入
floor(x):对数进行下舍入
round(x):把数四舍五入为最接近的整数
3、属性
PI

document.write(Math.PI+"<br/>");//3.141592653589793
document.write(Math.random()+"<br/>");//0.8554210787920384
document.write(Math.round(3.14)+"<br/>");//3
document.write(Math.floor(3.14)+"<br/>");//3
document.write(Math.ceil(3.14)+"<br/>");//4
/*
取1~100之间的随机整数
    1、Math.random()产生随机数:范围[0,1)小数
    2、乘以100 --> [0,100)小数
    3、舍弃小数部分:floor --> [0,99]
    4、+1 --> [1,100]
 */
var number = Math.floor(Math.random()*100)+1;
document.write(number);//45
Number
String
RegExp:正则表达式对象
1、正则表达式:定义字符串的组成规则

​ 1、单个字符:[ ]

​ 如:[a]、[ab](a或b)、[a-zA-Z0-9_](a-z或A-Z或0-9或__)

​ 特殊符号代表特殊含义的单个字符:

​ \d:单个数字字符[0-9]

​ \w:单个字符[a-zA-Z0-9_](a-z或A-Z或0-9或__)

​ 2、量词符号:

​ ?:表示出现0次或1次

​ *:表示出现0次或多次

​ +:表示出现1次或多次

​ {m,n}:表示m<= 数量 <=n

​ m如果缺省:{,n}:最多n次

​ n如果缺省:{m,}:最少m次

​ 3、开始结束符号:

​ ^:开始

​ $:结束

2、正则对象:

​ 1、创建

​ 1、var reg = new RegExp(“正则表达式”);(\要写\\

​ 2、var reg2 = /正则表达式/;

​ 2、方法

​ 1、text(参数):验证指定的字符串是否符合正则定义的规范

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qUUTNWr-1617688662435)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090659297.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cs9JjeV9-1617688662438)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090731939.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCTBaFcB-1617688662439)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090749520.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iq6RPuJf-1617688662440)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090813122.png)]

Global

1、特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用

2、方法:

​ encodeURI() 把字符串编码为 URI。(URL编码)

​ decodeURI() 解码某个编码的 URI。(URL解码)

​ encodeURIComponent() 把字符串编码为 URI 组件。(URL编码)编码的字符更多

​ decodeURIComponent() 解码一个编码的 URI 组件。(URL解码)

​ parseInt() 解析一个字符串并返回一个整数。将字符串转为数字

​ 逐一判断每一个字符是否是数字,知道不是数字为止,将前边数字部分转为number

​ isNaN() 判断一个值是否是NaN

​ NaN六亲不认,连自己都不认。NaN参与的==比较全部为false

​ eval() 将 JavaScript 字符串,转成脚本代码来执行。

3、URL编码

​ GBK:一个汉字两个字节,一个字节八个二进制位

​ UTF-8:一个汉字三个字节,一个字节八个二进制位

​ 高思语 = %E9%AB%98%E6%80%9D%E8%AF%AD

BOM

概念:Browser Object Model 浏览器对象模型

​ 将浏览器的各个组成部分封装成对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MIqVplQ-1617688662442)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210405095459033.png)]

组成:

Window:窗口对象

1、创建

2、方法

​ 1、弹出框有关的方法
​ alert():显示带有一段消息和一个确认按钮的警告框

​ confirm():显示带有一段消息以及确认按钮和取消按钮的对话框

​ 如果用户点击确定按钮,则方法返回true

​ 如果用户点击取消按钮,则方法返回false

​ prompt():显示课提示用户输入的对话框

​ 返回值:获取用户输入的值

alert("hello window");
window.alert("hell a");
var flag = confirm("您确定要退出?");
if(flag){
    //退出操作
    alert("欢迎下次光临");
}else {
    //提示
    alert("别手滑");
}

//输入框
var result = prompt("请输入用户名");
alert(result);

​ 2、与打开和关闭有关的方法:

​ close():关闭浏览器窗口

​ 谁调用我,我关谁

​ open():打开一个新的浏览器窗口

​ 返回新的Window对象

//打开新的窗口
var openBtn = document.getElementById("openBtn");
var newWindow ;
openBtn.onclick = function () {
    //打开新窗口
    newWindow = open("https://www.baidu.com");
};
//关闭新窗口
var closeBtn = document.getElementById("closeBtn");
closeBtn.onclick = function () {
    //关闭新窗口
    newWindow.close();
};

​ 3、与定时器有关的方式:

​ setTimeout() :在指定的毫秒后调用函数或计算表达式。一次性定时器

​ 两个参数:

​ 1、js代码或者方法对象

​ 2、毫秒值

​ 返回值:唯一标识,用于取消定时器

​ clearTimeout() :取消由setTimeout()方法设置的timeout。

​ setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。

​ clearInterval() :取消由setInterval()方法设置的timeout。

//一次性定时器
//setTimeout("fun();",2000);
var id = setTimeout(fun,2000);
clearTimeout(id);
function fun() {
    alert("lll");
}

//循环定时器
setInterval(fun,2000);

3、属性

​ 1、获取其他BOM对象

​ history

​ location

​ navigator

​ screen

​ 2、获取DOM对象

​ document

4、特点

​ window对象不需要创建可以直接使用, window使用:window.方法名();

​ window引用可以省略:方法名();

Navigator:浏览器对象
Screen:显示器屏幕
History:历史记录对象

1、创建(获取)

​ 1、window.history

​ 2、history

2、方法

​ back() 加载 history 列表中的前一个 URL

​ forward() 加载 history 列表中的下一个 URL

​ go(参数) 加载 history 列表中的某个具体页面

​ 参数:

​ 正数:前进几个历史记录

​ 负数:后退几个历史记录

3、属性

​ length :返回当前窗口历史列表中的URL数量。

<body>
    <input type="button" id="btn" value="获取历史记录个数">
    <a href="05_轮播图.html">05页面</a>
    <input type="button" id="forward" value="前进">
    <input type="button" id="back" value="后退">//写在页面05
<script>
    //1、获取按钮
    var btn = document.getElementById("btn");
    //2、绑定单击事件
    btn.onclick = function () {
        //3、获取当前窗口历史记录个数
        var length = history.length;
        alert(length);
    };

    //1、获取按钮
    var forward = document.getElementById("forward");
    //2、绑定单击事件
    forward.onclick = function () {
        //前进
        //history.forward();
        history.go(1);
    };

//写在页面05
	//1、获取按钮
    var back = document.getElementById("back");
    //2、绑定单击事件
    back.onclick = function () {
        //后退
        //history.back();
        history.go(-1);
    };

</script>

Location:地址栏对象

1、创建(获取)

​ 1、window.location

​ 2、location

2、方法

​ reload():重新加载当前文档。刷新

3、属性

​ href 设置或返回完整的URL。

<input type="button" id="btn" value="刷新">
<input type="button" id="go" value="去百度">

<script>
    //reload方法:定义一个按钮,点击按钮,刷新当前页面
    //1、获取按钮
    var btn = document.getElementById("btn");
    //2、绑定单击事件
    btn.onclick = function () {
        location.reload();
    }

    //获取href
    var href = location.href;
    //点击按钮访问百度官网
    //1、获取按钮
    var go = document.getElementById("go");
    //2、绑定单击事件
    go.onclick = function () {
        //去访问百度官网
        location.href = "https://www.baidu.com";
    }
</script>

DOM

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhmAnQaW-1617688662444)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210405102743697.png)]

功能:控制HTML文档的内容

代码:获取页面标签(元素)对象 Element

​ document.getElementById(“id值”):通过元素的 id来获取元素的对象

操作Element对象:

1、修改属性值

​ 1、明确获取的对象是哪一个?

​ 2、查看API文档,找其中有哪些属性可以设置

2、修改标签体内容

​ 属性:innerHTML

​ 1、获取元素对象

​ 2、使用innerHTML属性修改标签体内容

概念:Document Object Model 文档对象模型

​ 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作

W3C DOM表准被分为3个不同的部分:

核心DOM:针对任何结构化文档的标准模型
Document:文档对象

1、创建(获取):在HTML DOM模型中可以使用window对象来获取

​ 1、window.document

​ 2、document

2、方法:

​ 1、获取Element对象:

​ 1、getElementById():根据id属性值获取元素对象,id属性值一般唯一

​ 2、getElementByTagName():根据元素名称获取元素对象们。返回值是一个数组

​ 3、getElementByClassName():根据Class属性值获取元素对象们。返回值是一个数组

​ 4、getElementByName():根据name属性值获取元素对象们。返回值是一个数组

​ 2、创建其他DOM对象:

​ createAttribute(name)

​ createComment()

​ createElement()

​ createTextNode()

3、属性:

<div id="div1">div1</div>
    <div id="div2">div2</div>

    <div id="div3">div3</div>

    <div class="cls1">div4</div>
    <div class="cls2">div5</div>
    <input type="text" name="username">

<script>
    //2、getElementByTagName():根据元素名称获取元素对象们。返回值是一个数组
    var divs = document.getElementsByTagName("div");
    alert(divs.length);//5
    //3、getElementByClassName():根据Class属性值获取元素对象们。返回值是一个数组
    var div_cls = document.getElementsByClassName("cls1");
    alert(div_cls.length);//1
    //4、getElementByName():根据name属性值获取元素对象们。返回值是一个数组
    var ele_username = document.getElementsByName("username");
    alert(ele_username.length);//1

    var table = document.createElement("table");
    alert(table);//[object HTMLTableElement]
</script>
Element:元素对象

1、获取/创建:通过document来获取和创建

2、方法:

​ 1、removeAttribute():删除属性

​ 2、setAttribute():设置属性

Attribute:属性对象
Text:文本对象
Comment:注释对象
Node:节点对象,其他五个的父对象

特点:所有dom对象都可以被认为是一个节点

方法:

​ CRUD DOM树:

​ appendChild():向节点的子节点列表的结尾添加新的子节点。

​ removeChild():删除(并返回)当前节点的指定子节点。

​ replaceChild():用新节点替换一个子节点。

<div id="div1">
        <div id="div2">
            div
        </div>
    </div>
    <!--
    超链接功能:
        1、可以被点击:样式
        2、点击后跳转到href指定的url
    保留1功能,去掉2功能
        实现:href="javaScript:void(0);"
    -->
    <a href="javaScript:void(0);" id="del">删除子节点</a>
    <!--<input type="button" id="del" value="删除子节点">-->
    <a href="javascript:void(0);" id="add">添加子节点</a>
<script>
    //1、获取超链接a
    var element_a = document.getElementById("del");
    //2、绑定单击事件
    element_a.onclick = function () {
        var div1 = document.getElementById("div1");
        var div2 = document.getElementById("div2");
        div1.removeChild(div2);
    };
    //1、获取超链接a
    var element_add = document.getElementById("add");
    //2、绑定单击事件
    element_add.onclick = function () {
        var div1 = document.getElementById("div1");
        //创建一个div节点
        var div3 = document.createElement("div");
        div3.setAttribute("id","div3");
        //给div1添加子节点
        div1.appendChild(div3);
    }
</script>

属性:

​ parentNode :返回节点的父节点。

var div2 = document.getElementById("div2");
var div1 = div2.parentNode;
alert(div1);
XML DOM:针对XML文档的标准模型
HTML DOM:针对HTML文档的标准模型

1、标签体的设置和获取:innerHTML

2、使用HTML元素对象的属性

3、控制元素样式

​ 1、使用元素的style属性来设置

div1.style.border = "1px solid red";
div1.style.width = "200px";
//font-size -->fontSize
div1.style.fontSize = "20px";

​ 2、提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。

div2.className = "dl"; 

事件监听机制

功能:某些组件被执行了某些操作后,触发某些代码的执行。

如何绑定事件:

1、直接在HTML标签上,指定事件的属性(操作),属性值就是js代码

​ 1、事件:onclick ----- 单击事件

<img id="light" width="960" height="540" src="image/1.jpeg" onclick="fun();">
<script>
    function fun() {
        alert('我被点了');
    }
</script>

2、通过js获取元素对象,指定事件属性,设置一个函数

<img id="light2" width="960" height="540" src="image/1.jpeg">
<script>
    function fun2() {
        alert('干哈');
    }

    //1、获取light2对象
    var light2 = document.getElementById("light2");
    //2、绑定事件
    light2.onclick = fun2;
</script>

分析:

1、获取图片对象

2、绑定单机事件

3、每次点击切换图片:使用flag来标记完成

<img id="light" src="image/1.jpeg">
<script>
    var light = document.getElementById("light");
    var flag = false;
    light.onclick = function () {
        if(flag){
            light.src = "image/2.jpeg";
            flag = false;
        }else {
            light.src = "image/1.jpeg";
            flag = true;
        }
    }
</script>

概念:某些组件被执行了某些操作后,触发某些代码的执行。

事件:某些操作,如:单击,双击,键盘按下了,鼠标移动了

事件源:组件,如:按钮,文本输入框,…

监听器:代码。

注册监听:将事件、事件源、监听器结合在一起。当事件源上发生了某个事件,则触发执行某个监听器代码。

常见的事件:

1、点击事件:

onclick:单击事件

ondblclick:双击事件

2、焦点事件:

onblur:失去焦点事件

​ 一般用于表单校验

onfocus:元素获得焦点

3、加载事件:

onload:一张页面或一幅图像完成加载

4、鼠标事件:

onmousedown:鼠标按钮被按下

​ 定义方法时,定义一个形参,接受event对象

​ even对象的button属性可以获取鼠标按钮键被点击了

​ 0 指定鼠标左键、1 指定鼠标中键、2 指定鼠标右键。

onmouseup:鼠标按键被松开

onmousemove:鼠标被移动

onmouseover:鼠标移到某元素之上

onmouseout:鼠标从某元素移开

onmouseenter 当鼠标指针移动到元素上时触发

onmouseleave 当鼠标指针移出元素时触发

5、键盘事件:

onkeydown:某个键盘按键被按下

if(event.keyCode == 13){
	alert("提交表单");
}

onkeyup:某个键盘按键被松开

onkeypress:某个键盘按键被按下并松开

6、选中和改变:

onchange:域的内容被改变

onselect:文本被选中

7、表单事件:

onsubmit:确认按钮被点击

onreset:重置按钮被点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值