JavaScript

JavaScript<交互>

一,什么是Javascript

w3school 在线教程 :https://www.w3school.com.cn/js/index.asp
菜鸟教程:https://www.runoob.com/js/js-tutorial.html
JavaScript教程:https://www.liaoxuefeng.com/wiki/1022910821149312

(1)概述

JavaScript是一门世界上最流行的脚本语言
Java、 JavaScript

(2)历史

1.1、概述
JavaScript的起源故事:
https://blog.csdn.net/kese7952/article/details/79357868

ECMAScript它可以理解为是Javascript的一个标准
最新版本已经到es6版本-
但是大部分浏览器还只停留在支持es5代码上!
开发环境一线上环境,版本不一致

二,快速入门

(1)引入JavaSciprt

1、内部标签

<script>
        alert("法外狂徒张三");//...
    </script>

2、外部引入
ab.js

alert("法外狂徒张三")

index.html

<!--外部引入
        注意:script必须成对出现
    -->
<script src="外部引入.js">
    </script>
    <!--不用显示定义type,也默认就是javaScript-->
    <script type="text/javascript"></script>

(2)基本语法

<!--JavaScript严格区分大小写-->
    <script>
        //1,定义变量  java:变量类型 变量名=变量值
        var score=77;
        //2,条件控制
        if(score>=60&&score<70){
            alert("[60,70)")
        }else if(score>=70&&score<80){
            alert("[70,80)")
        }else{
            alert("other")
        }
        //console.log(score)在浏览器的控制台打印变量!sout
    </script>

浏览器必备调试须知:
在这里插入图片描述

(3)数据类型

数值,文本,图形,音频,视频
1,number
js不区分小数和整数,Number

123//整数123
123.1//浮点数123.1
1.123e3//科学计数法
-99//负数
NaN	//not a number
Infinity // 表示无限大

2,字符串 ‘abc’ “abc”
3,布尔值 true,false
4,逻辑运算

&& 两个都为真,结果为真

|| 一个为真,结果为真

! 	真即假,假即真

5,比较运算符

=
1,"1"
== 等于(类型不一样,值一样,也会判断为true)
=== 绝对等于(类型一样,值一样,结果为true)

这是一个JS的缺陷,坚持不要使用 == 比较
须知:
NaN === NaN,这个与所有的数值都不相等,包括自己
只能通过isNaN(NaN)来判断这个数是否是NaN
在这里插入图片描述

浮点数问题:
尽量避免使用浮点数进行运算,存在精度问题!

在这里插入图片描述
6,null 和 undefined
null 空
undefined 未定义
在这里插入图片描述
7,数组
Java的数组必须是相同类型的对象,JS中不需要这样

//保证代码的可读性,尽量使用[]
var arr = [1,2,3,4,5,'hello',null,true];
//第二种定义方法
new Array(1,2,3,4,5,'hello');

取数字下标:如果越界了,就会 报undefined
在这里插入图片描述
8,对象

对象是大括号,数组是中括号
每个属性之间使用逗号隔开,最后一个属性不需要逗号

在这里插入图片描述
9,变量 var score=77;

(4)严格检查格式

前提:IDEA需要设置支持ES6语法
‘use strict’;严格检查模式,预防JavaScript的随意性导致产生的一些问题
必须写在JavaScript的第一行!
局部变量建议都使用let去定义~

'use strict'
        // i=1;默认为全局变量
        let i=1;  //ES6 let

三,数据类型

(1)字符串

1、正常字符串我们使用 单引号,或者双引号包裹
2、注意转义字符 \

\u4e2d    \u##### Unicode字符

\x41	Ascall字符

在这里插入图片描述
3、多行字符串编写
在这里插入图片描述
4、模板字符串
在这里插入图片描述
5、字符串长度 str.length
6、字符串的可变性,不可变
在这里插入图片描述
7、大小写转换
注意,这里是方法,不是属性了 student.toLowerCase();
在这里插入图片描述
8、student.indexof(‘t’)获取指定字符的下标
在这里插入图片描述
9、substring 包前不包后
在这里插入图片描述

(2)数组

Array可以包含任意的数据类型
在这里插入图片描述
1、长度
在这里插入图片描述
注意:假如给arr.lennth赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失
2、indexOf,通过元素获得下标索引
在这里插入图片描述
字符串的"1"和数字 1 是不同的
3、slice()截取Array的一部分,返回的一个新数组,类似于String中substring
在这里插入图片描述
4、push(),pop()尾部
push:压入到尾部
pop:弹出尾部的一个元素
在这里插入图片描述
5、unshift(),shift() 头部
unshift:压入到头部
shift:弹出头部的一个元素
在这里插入图片描述
6、排序sort()
sort() 方法以字母顺序对数组进行排序
在这里插入图片描述
7、元素反转reverse()
在这里插入图片描述
8、concat()
在这里插入图片描述
注意:concat()并没有修改数组,只是会返回一个新的数组
9、连接符join
打印拼接数组,使用特定的字符串连接
在这里插入图片描述
10、多维数组
在这里插入图片描述
数组:存储数据

(3)对象

若干个键值对

var 对象名 = {
	属性名:属性值,
	属性名:属性值,
	属性名:属性值
}

//定义了一个person对象,它有4个属性
        var person= {
            name: "张三",
            age: 18,
            email: "1101101109@qq.com",
            score: 110
        }

Js中对象,{…}表示一个对象,键值对描述属性XXX:xxx,多个属性之间用逗号隔开,最后一个属性不加逗号!
JavaScript中的所有的键都是字符串,值是任意对象!
1、对象赋值
在这里插入图片描述
2、使用一个不存在的对象属性,不会报错!undefined
在这里插入图片描述
3、动态的删减属性,通过delete删除对象的属性
在这里插入图片描述
4、动态的添加,直接给新的属性添加值即可
在这里插入图片描述
5、判断属性值是否在这个对象中!xxx in xxx
在这里插入图片描述
6、判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
在这里插入图片描述

(4)流程控制

1、if判断
在这里插入图片描述
2、while循环,避免程序死循环
在这里插入图片描述
3、for循环
在这里插入图片描述
4、forEach循环
在这里插入图片描述
5、for …in 下标
for …of 值
在这里插入图片描述

(5)Map和Set

1、Map
在这里插入图片描述
在这里插入图片描述
2、Set:无序不重复的集合
在这里插入图片描述

(6)使用iterator来遍历迭代我们Map,Set

1、 for …of 遍历数组
在这里插入图片描述
2、 for …of 遍历Map
在这里插入图片描述
3、 for …of 遍历set
在这里插入图片描述

四,函数

(1)定义函数

1,定义方式

定义方式一

在这里插入图片描述
一旦执行到return代表函数结束,返回结果!
如果没有执行return,函数执行完也会返回结果,结果就是NaN

定义方式二

在这里插入图片描述
function(x){…}这是一个匿名函数。但是可以吧结果赋值给abs,通过abs就可以调用函数!
方式一和方式二等价!

2,参数问题-不存在参数

参数问题:javaScript可以传任意个参数,也可以不传递参数
假设不存在参数,如何规避?
在这里插入图片描述

3,参数问题-存在多个参数arguments

arguments是一个JS的关键字,其代表,传递进来的所有参数,是一个数组!
在这里插入图片描述
问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作。需要排除已有参数
在这里插入图片描述

4,参数问题-存在多个参数 …rest

ES6引入的新特性,获取除了已经定义的参数之外的所有参数
在这里插入图片描述
rest参数只能写在最后面,必须用…标识

(2)变量的作用域

1,在javascript中,var定义变量实际是有作用域的

假设在函数体中声明,则在函数体外不可以使用(非要实现的话,可用闭包)

 function f() {
            var x=1;
            x=x+1;
        }
        x=x+2;//Uncaught ReferenceError: x is not defined

如果两个函数使用了相同的变量名,只要在函数内部就不冲突
在这里插入图片描述

2,内部函数可以访问外部函数的成员,反之则不行

function f(){
            var x=1;
            //内部函数可以访问外部函数的成员,反之则不行
            function ff(){
                var y=x+1;
            }
            var z=y+2;//ReferenceError: y is not defined
        }

3,假设,内部函数变量和外部函数变量,重名

在这里插入图片描述
在这里插入图片描述
假设在JavaScript中,函数查找变量从自身函数开始, 由“内”向“外”查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

4,提升变量的作用域

在这里插入图片描述
结果:x undefined
说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值;
养成规范:所有的变量定义都放在函数的头部,便于代码维护

function f(){
            var x=1,
                y=x+1,
                z,i,a;//undefined
            //之后随意用
            a=1;
        }

5,全局变量

在这里插入图片描述
全局对象window
在这里插入图片描述
alert() 这个函数本身也是一个window的变量

var x='xxx';
        window.alert(x);
        var old_alert=window.alert;
        //old_alert(x);
        window.alert=function(){

        };
        //发现alert()失效了
        window.alert(123);
        //恢复alert
        window.alert=old_alert;
        window.alert(999);

javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错 Refrence
在这里插入图片描述
规范:
由于我们的所有变量都会绑定到window上,。如果不同的js文件,使用了相同的全局变量,就会产生冲突—>如何减少这样的冲突?

//唯一全局变量
        var zhangsan={};
        //定义全局变量
        zhangsan.name='张三';
        zhangsan.add=function(a,b){
            return a+b;
        }

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突问题~
jQuery中就是使用的该方法:jQuery.name,简便写法:$()

6,局部作用域let关键字,解决了局部作用域冲突的问题

在这里插入图片描述
ES6的let关键字,解决了局部作用域冲突的问题
在这里插入图片描述
建议使用let去定义局部作用域的变量

7,常量const

在ES6之前,怎么定义常量:只有用全部大写字母命名的变量就是常量;建议不要修改这样的值。
在这里插入图片描述
在ES6引入了常量关键字 const
在这里插入图片描述

(3)方法

(1)定义方法

在这里插入图片描述
this.代表什么?拆开上面的代码看看:this默认指向调用它的对象
在这里插入图片描述

(2)apply在js中可以控制this指向

在这里插入图片描述

五,内部对象

(1)标准对象

在这里插入图片描述

(2)Date

1,基本使用

var now = new Date();
now;               // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
        now.getFullYear();//年
        now.getMonth();//月
        now.getDate();//日
        now.getDay();//星期几
        now.getHours();//时
        now.getMinutes();//分
        now.getSeconds();//秒
        now.getTime();//时间戳 全世界统一

如果要创建一个指定日期和时间的Date对象,可以用:
var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
2,转换

console.log(new Date(1624508138748))//时间戳转为时间

在这里插入图片描述

(3)JSON

1,JSON是什么

在这里插入图片描述
在javascript中,一切皆为对象,任何js支持的类型都可以用JSON表示
格式:
对象都用{}
数组都用[]
所有的键值对 都是用key:value

2,JSON字符串和js对象转化

在这里插入图片描述
JSON和JS对象的区别
在这里插入图片描述

3,数据传输的XML文件

<!--JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。如
          var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
          var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
        -->
        <!--jackson databind: 数据绑定包,提供Java对象与JSON数据格式进行序列化及反序列化的支持
            序列化:将对象写入IO流中;
            反序列化:从IO流中恢复对象;
        -->
        <!--简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,
        然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.3</version>
        </dependency>

4,AJAX

https://www.runoob.com/ajax/ajax-tutorial.html
Ajax 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。
在这里插入图片描述

5,jQuery封装好的方法 $(#name).ajax("")

jQuery API 中文文档:https://jquery.cuishifeng.cn/

//js:嵌入动态文本于HTML页面。对浏览器事件做出响应
//页面加载完成以后执行function代码
$(function () {
    //jquery,使用$("#id")通过元素id获取某个页面元素
    $("#login_form").submit(function () {
        //ajax自己发请求
        $.ajax({
            url:"../login", //请求的服务路径
            type: "post",   //请求方法
            //contentType: "",    //请求的数据类型:请求头Content-Type,默认表单格式,json要指定json
            data: $("#login_form").serialize(), //请求数据:使用序列化表单的数据
            dataType: "json",   //响应的数据类型:使用json要指定
            
            //通过回调函数,响应200时,获得响应的数据
            success: function (r) {//响应体json字符串,解析为方法参数
                if(r.success){
                    //前端页面url直接跳转到某个路径
                    window.location.href="../jsp/articleList.jsp";
                }else {
                    alert("错误码:"+r.code+"\n错误消息:"+r.message)
                }
            }
        })
        //统一不执行默认的表单提交
        return false;
    })
})

在这里插入图片描述

六,面向对象编程

(1)什么是面向对象

在这里插入图片描述
原型:<父类>
在这里插入图片描述
在这里插入图片描述

(2)class继承

class关键字,是在ES6引入的
1,给原型增加一个方法

function Student(name){
            this.name=name;
        }
        //给student原型新增一个方法
        Student.prototype.hello=function(){
            alert("hello");
        }

2,定义一个类,属性 方法

//定义一个学生的类
class Student{
            constructor(name){
                this.name=name;
            }
            hello(){
                alert('hello');
            }
        }
var zhangsan=new Student("张三");
 var wangwu=new Student("王五");
 zhangsan.hello()

3,继承
在这里插入图片描述
本质:原型对象
在这里插入图片描述
4,原型链
在这里插入图片描述

七,操作BOM对象

(1)浏览器介绍

javascript和浏览器关系?
js的出现就是为了能让它在浏览器中运行
浏览器中包含JavaScript引擎,由JavaScript引擎提供语言层面的支持;但JavaScript引擎只是浏览器中必不可少的一小部分,浏览器中还包括网络进程、GPU进程、任务队列…是一个庞大的协作结构,浏览器通过各部分的协作提供语言之外的实现,比如网络请求、视图渲染、事件监听。

BOM:浏览器对象模型
浏览器:
IE6~11 Chrome
Safari FireFox
Opera
三方:
QQ浏览器
360浏览器

(2)window

window代表浏览器窗口
在这里插入图片描述

(3)Navigator(不建议使用)

Navigator封装了浏览器的信息
在这里插入图片描述
大多数时候,我们不会使用navigator对象,因为会被人为修改
不建议使用这些属性来判断和编写代码

(4)screen

代表屏幕尺寸
在这里插入图片描述

(5)location(重要)

location代表当前页面的URL信息
在这里插入图片描述
//设置新的地址
location.assign(“https://blog.csdn.net/m0_50507927”);

(6)document(内容DOM)

document代表当前的页面,HTML DOM文档树
在这里插入图片描述
获取具体的文档树节点
在这里插入图片描述
获取cookie
在这里插入图片描述
劫持cookie原理
在这里插入图片描述
服务器端可以设置cookie为httpOnly

(7)history(不建议使用 )

history代表浏览器的历史记录
在这里插入图片描述

八,操作DOM对象

在这里插入图片描述
DOM:文档对象模型
在这里插入图片描述

浏览器网页就是一个Dom树形结构
更新:更新Dom节点
遍历Dom节点:得到Dom节点
删除:删除一个Dom节点
添加:添加一个新的节点

要操作一个Dom节点,就必须要先获得这个Dom节点

(1)获得Dom节点

<body>
<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
</div>

<script>
    //对应css选择器
    var h1=document.getElementsByTagName('h1');
    var p1=document.getElementById('p1');
    var p2=document.getElementsByClassName('p2');
    var father=document.getElementById('father');
    var childrens=father.children;//获取父节点下的所有子节点
    // father.firstChild;
    // father.lastChild;

</script>

这是原生代码,之后我们尽量都使用jQuery();

(2)更新节点

1,操作文本

在这里插入图片描述
2,操作css
在这里插入图片描述
在这里插入图片描述

(3)删除节点

删除节点的步骤:先获取父节点,再通过父节点删除自己
在这里插入图片描述
注意:删除多个节点的时候,children是在时刻变化的,删除节点的时候一定要注意。
在这里插入图片描述

(4)插入节点

我们获得了某个Dom节点,假设这个dom节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个Dom节点已经存在元素了,我们就不能这么干了!会产生覆盖

追加append
1,将已有的标签追加
在这里插入图片描述
2,创建新的标签追加
在这里插入图片描述
3,setAttribute

属性:
newP.id=‘newP’;//等价 newP.setAttribute(‘id’,‘newP’)

//创建一个标签节点
    var myScript = document.creatElement('script');
    myScript.setAttribute('type','text/javascript');

在这里插入图片描述

//可以创建一个style标签
    var myStyle=document.createElement('style');//创建了一个空的style标签
    myStyle.setAttribute('type','text/css');
    myStyle.innerHTML='bady{background-color:chartreuse;}';//设置标签内容

在这里插入图片描述
相当于:
在这里插入图片描述

(5)insertBefore

var ee = document.getElementById('ee');
var js = document.getElementById('js');
var list = document.getElementById('list');
//要包含的节点.insertBefore(newNode,targetNode)
list.insertBefore(js,ee);

在这里插入图片描述

九,操作表单(验证)

(1)表单是什么?form-----DOM树

文本框----text
下拉框----select
单选框----radio
多选框----checkbox
隐藏域----hidden
密码框----password

表单的目的:提交信息

(2)获得要提交的信息

在这里插入图片描述

<body>
<form action="post">
    <p>
        <span>用户名:</span>
        <input type="text" id="username">
    </p>
<!--多选框的值,就是定义的value-->
    <p>
        <span>性别</span>
        <input type="radio" name="sex" value="man" id="boy"><input type="radio" name="sex" value="women" id="girl"></p>

</form>
<script>
    var input_text=document.getElementById('username');
    var boy_radio=document.getElementById('boy');
    var girl_radio=document.getElementById('girl');
    //对于单选框,多选框等固定的值,boy_radio.value只能取到当前的值
    boy_radio.checked;//查看返回的结果,是否为true,如果为true,则被选中
    
</script>

(3)提交表单

在这里插入图片描述
绑定按钮
在这里插入图片描述

(4)md5加密密码,表单优化

在这里插入图片描述

(4)表单绑定提交事件

在这里插入图片描述

<script>
    function check() {
        var username=document.getElementById('username');
        var password=document.getElementById('input-password');
        var md5pwd = document.getElementById("md5-password");
        md5pwd.value=md5(password.value);
        console.log(username.value);
        console.log(password.value);
        // //MD5算法加密
        // password.value = mad5(password.value);
        //可以校验判断表单内容,true就是通过提交,false,阻止提交
        return true;
    }
</script>

十,jQuery

jQuery API 中文文档:https://jquery.cuishifeng.cn/
javaScript和jQuery的关系?

jQuery库,里面存在大量的JavaScript函数

(1)获取jQuery 公式:$(selector).action()

在这里插入图片描述
封装

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- jQuery的cdn加速地址 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body>
<a href="" id="test-jquery">点我</a>
<script>
    document.getElementById('id');
    //选择器就是css的选择器
    $('#test-jquery').click(function(){
        alert('hello, jQuery');
        }
    );
</script>
</body>
</html>

(2)选择器

<script>
    //原生js,选择器少,麻烦不好记
    //标签
    document.getElementsByTagName();
    //id
    document.getElementById();
    //类
    document.getElementsByClassName();
    //jQuery css中的选择器它全部都能用
    $('p').click();//标签选择器
    $('#id1').click();//id选择器
    $('.class1').click();//class选择器
</script>

(3)事件

鼠标事件、键盘事件,其他事件
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #divMove{
            width: 100px;
            height: 100px;
            border: 1px solid red;
        }
    </style>
    <!-- MD5工具类 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body>
<!--要求:获取鼠标当前的一个坐标-->
mouse:<span id="mouseMove"></span>
<div id="divMove">
    在这里移动鼠标试试
</div>
<script>
    //当网页加载完毕之后,响应事件
    // $(document).ready(function () {
    // })
    $(function () {
        $('#divMove').mousemove(function(e){
            $('#mouseMove').text('x:'+e.pageX+'y:'+e.pageY)
        })
    });
</script>
</body>
</html>

(4)操作DOM元素

节点文本操作

在这里插入图片描述

CSS的操作

$('#test-ul li[name=python]').css("color","red");

元素的显示和隐藏,:本质display:none

$('#test-ul li[name=python]').show();
$('#test-ul li[name=python]').hide();

娱乐测试

$(window).width()
$(window).height()
$(’#test-ul li[name=python]’).toggle();//对表格切换 显示/隐藏

ajax()

$(’#form’).ajax()

$.ajax({url:“test.html”,context:document.body,success:function(){
$(this).addClass(“done”);
}})

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值