1、什么是Javascript

1.1、概述

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

Java、javaScript

10天~

一个合格的后端人员,必须要精通JavaScript

1.2、历史

ECMAScript它可以理解为是JavaScript的一个标准

最新版本已经到了es6版本~

但是大部分浏览器还停留在支持es5代码上~

开发环境–线上环境,版本不一致

2、快速入门

2.1、引入JavaScript

  1. 内部标签

    alert(‘xxx’):弹窗

     <!--内部js-->
    <script>alert('hello word!')
    /*弹窗 alert*/
    </script>
    
  2. 外部引入

     <script src="../JS/MW.js"></script>
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hnm13Jh9-1636732352338)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211010110620228.png)]

注意:Script成对出现

//不用显示定义type,也默认就是javascript<script type="text/javascript"></script>

2.2、基本语法入门

浏览器调试须知:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-13DR9uOi-1636732352341)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211012162248432.png)]

Elements:元素

Console:控制台

Sources:源码调试

Network:互联网抓包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkHirD2e-1636732352342)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211012162006203.png)]

    <script>
<!--script严格区分大小写!-->/*1、定义变量*/var  source=66;/*变量类型只有一个var 变量名=变量值*//*    alert(source);*//*2、条件控制*/if(source>60 && source<70){alert(source)}else if (source>70 && source<80){alert(source);}alert('999');// 在浏览器的控制台打印变量!console.log('我的宝儿!')</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzmuPGdT-1636732352345)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211012163403768.png)]

2.3、数据类型

数值,文本,图形,视频,音频。。。。

变量

var _$
//变量名不能用数字开头

number
js不区分小数和整数,都用number

123//整数123
123.12//浮点数123.1
1.12e3//科学技术法=1120
-88//负数
NaN//not a number 不是一个number
Infinity //表示无限大

字符串

‘abc’ “abc”

布尔型

ture, flase

<script>var  a=5;console.log(a>4);</script>

逻辑运算

&&   and
||   or
!     not

比较运算符

=  //赋值
== //等于(类型不一样,值一样,会判断ture)==== //等于(类型一样,值一样,判断ture)

这是js的缺陷,坚持不要使用==比较

须知

  • NaN==NaN ,这个与所有的数值都不相等,包括自己

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9uNJhzy-1636732352349)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211019221458871.png)]

  • 只能通过isNaN(NaN)来判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhQHjJgt-1636732352350)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211019221956575.png)]

  • 浮点数问题

      <script>/*  var  a=5;*/console.log((1-1/3)===1/3);</script>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NECeUUyg-1636732352352)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211019222629704.png)]

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

    函数绝对值Math.abs

    使用绝对值比较

    <script>/*  var  a=5;*/console.log((Math.abs(1-2/3)===1/3)<0.00000001);</script>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ewnuvdFG-1636732352353)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211019223106756.png)]

数组

JAVA的数组必须是相同类型的对象~,JS不用这样

对象定义数组new Array

 <script>/*  var  a=5;*//* console.log((Math.abs(1-1/3)===1/3)<0.00000001);*/var arr = [1,2,3,4,5,null,'hello',true]//面向程序new Array(1,2,4,5) //面向程序console.log(arr[6]);</script>

取数组下表如果越界会报

undefined

null和undefined

  • null 表示空

  • undefined 未定义

对象

对象是大括号,数组是中括号

var person ={name:'chengmingwei',age:20,arr:[1,2,4,5,null]}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZNq28Li-1636732352355)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211019230430627.png)]

取对象的值

person.age
>20
person.name
>'chengmingwei'

2.4、严格检查格式

//未定义 的变量 ,默认全局变量

前提是是ES6模式下

局部变量建议使用let去定义,必须写在第一行script

用严格检查格式,use strict就会报错变量未定义类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pT6T6WgA-1636732352356)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020105854965.png)]

 <script>/* 'use strict' 严格检查模式,防止JAVAScrip的随意性导致出现问题t*/
'use strict';let  i=1;console.log(i);</script>

3、数据类型

3.1、字符串

1、正常字符串我们使用,单引号或者双引号包裹

2、注意转义字符\

\'
\n
\u4e2d \u####  unicode字符
\x41   ASCLL字符

3、多行字符串编写

<script>
//tab 上面的飘号
var msg=`
hello
world
英雄联盟
`
</script>

4.模板字符串

 'use strict';//严格检查格式let  name='chengmingwei';let   age=3;let    msg=`你好呀,${name}`;console.log(msg);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBWhJv1X-1636732352358)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020185316242.png)]

5、字符串长度

//str.length
var student='student';console.log(student.length);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJZH6cto-1636732352359)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020190705354.png)]

6、字符串的可变性,不可变

7、大小写转换

//注意,这里是方法,不是属性了
student.toupperCase()
student.toLowerCase()

8、student.lindexof(‘t’)

9、substring

[)student.substring(1)//从第一个字符串截取到最后一个字符串student.substring(1,3)//[1,3)

3.2、数组

Array可以包含任意的数据类型

//控制台打印数组
var arr=[1,2,3,4,56];console.log(arr);

1、长度

var arr=[1,2,3,4,56];
arr[0]=99;
arr.length=10;console.log(arr);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8I8Itqo-1636732352361)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020203531774.png)]

注意:加入arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失,如果过大就会用空来替补。

2.indexOf 通过元素查找索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pWnUcHU-1636732352362)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020205235620.png)]

字符串的‘’1‘’和数字的1不同

3、slice() 截取Array的一部分,返回一个新数组,类似于String中的substring

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xIU0EB0-1636732352364)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020205626544.png)]

4、push,pop //类似数据结构中的栈

push压入尾部
pop弹出尾部

5、unshift(),shift()头部

unshift压入头部
shift弹出头部

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b0lp5dTq-1636732352365)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020210438424.png)]

6.排序sort

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ScblfbTE-1636732352366)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020210927097.png)]

7.元素反转reverse()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WEANLC5-1636732352368)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020211046480.png)]

8.concat()拼接

arr.concat('a','b','c')
(10) [9, 8, 7, 4, 3, 2, 1, 'a', 'b', 'c']

注意:concat()并不会修改数据,只会返回数据新的数组

9.连结符号join

打印拼接数组,使用特定的字符串连结

arr.join('-')
'9-8-7-4-3-2-1'

10.多维数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cw8VBreO-1636732352370)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020212526367.png)]

注意:多维数组打印的时候,arr[M] [N]表示M行的N个数组,只有一行的时候,看N,M可以未任意值,也可以为null

3.3、对象

若干个键对

var 对象名 = {属性名:属性值,
属性名:属性值,
属性名:属性值,
}
//定义一个person的对象,他有四个属性!
var person ={name:'chengmingwei',age:9,email:1092705638@qq.com,score:59
}

JS中对象,{。。。}表示一个对象,键值对描述属性xxxx:xxx,属性之间使用逗号隔开,最后一个不加逗号!

JavaScript中的所有的键都是字符串,值是任意对象!

<script>'use strict';var person={name:'chengmingwei',age:9,email:'1092705638@qq.com',score:59}console.log(person.name);

1、对象赋值

person.name='chengmingwei'
'chengmingwei'

2、动态的删除属性,通过delete删除对象属性

person
{name: 'chengmingwei', age: 9, email: '1092705638@qq.com', score: 59}
delete person.name
true

3、使用一个不存在的属性,不会报错 undefined

//person  kk
undefined

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaSAPPSO-1636732352371)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211020215649545.png)]

4、动态的添加,直接给新的属性添加值即可

person.name='chengmingwei'
'chengmingwei'

5、判断属性值是否在这个对象中

'age'in person
ture
//继承
'toString' in person
true

6、判断一个属性是否是这个对象自身拥有的hasOwnProperty

person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true

3.4、流程控制

if判断

var age=3;if (age>3){alert('倔强青铜')}else{alert('最强王者')}

While循环

 let age=0;while(age<100){age=age+1;console.log(age);}
//do while
do{age=age+1;console.log(age);
}while(age<100);

for循环

 for (let i = 0; i <100 ; i++) {console.log(i)}

forEach循环遍历数组

 var age=[1,2,3,4,5,6,7,9,8];age.forEach(function (value) {console.log(value)}

for in…

3.5、Map和Set

ES6的新特性

Map

//var name=["Tom","Jack","Luse"];//var source=[100,80,60];var map=new Map([['Tom',100],['Jack',80],['Luese',60]]);var name=map.get('Tom');map.set('Admin',1234567);//增加或修改map.delete('Admin',1234567);//删除console.log(name);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46xH0eA2-1636732352373)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211021151420244.png)]

Set无序不重复的集合//去重

var set =new Set([1,2,3,3,3,3])console.log(set);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xh2jJEHy-1636732352374)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211021151736662.png)]

set.add(11)//增加
Set(4) {1, 2, 3, '9'}
set.delete('1')//删除
false
set
Set(4) {1, 2, 3, '9'}
set.delete(1)
true
set
Set(3) {2, 3, '9'}
console.log(set.has(2))//是否包含这个元素

3.6、iterator

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

遍历数组

//for(var x in arr)遍历索引
//for(var x of arr)遍历数组值
var arr=[1,2,3,4,5]for(var x of arr){console.log(x);}

遍历Map

var map=new Map([['chengmingwei',20],['liqinglan',20]]);for(let x of map){console.log(x);}
//遍历结果
(2) ['chengmingwei', 20]
5、循环判断.html?_ijt=k6ght20dek5dh3oga80dunf7tn:25 (2) ['liqinglan', 20]

遍历Set

var set =new Set([1,2,3,4,5,88]);for (let x of set){console.log(x);}

区别:for of 不会遍历手动添加的值,而for in会

4、函数及面向对象

4.1定义函数

定义方式一

绝对值函数

function abs(x){if(x>0){return x;
}else{return -x;
}
};

一旦执行到return代表函数结束,返回结果!

如果没有执行return,函数执行完全也会返回结果,结果就是undefined

定义方式二

var abs=function(x){if(x>0){return x;}else{return -x;}}

function(x)(。。)这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数.

调用函数

abs(10)//10
abs(-10)//

参数问题:JavaScript可以传递任意个参数,也可以不传递任何参数

参数进来是否存在的问题?

假设不存在参数,如何规避?

var abs=function(x){//手动抛出异常if(typeof x !=='number'){throw 'Not a Number';}if(x>0){return x;}else{return -x;}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ftybChLi-1636732352376)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211021230326261.png)]

arguments

arguments是一个js免费赠送的关键词;

代表,传递进来的所有的参数,是一个数组!

var abs=function(x){console.log('x=>'+x);for(var i=0;i<arguments.length;i++){console.log(arguments[i])}//遍历参数if(x>0){return x;}else{return -x;}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrsvpP23-1636732352377)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211021232712021.png)]

问题:arguments包含所有的参数,我们有时候想使用多余的参数进行附加操作。需要排除已有参数~

rest

Es6引入的新特性,获取除了已经定义的参数之外的所有参数。。。

function ab(a,b,...rest){console.log('a=>'+a);console.log('b=>'+b);console.log(rest);
}

rest参数只能写再函数的最后面 ,必须用…标识

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5q4781B-1636732352378)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211021235609616.png)]

4.2、变量的作用域

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

假设在函数体中声明,则在函数外不能使用~(闭包)

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

如果两个函数使用了相同的变量名,只要在内部就互不影响。

function f1() {var x=1;x=x+1;
}
function f2() {var x=1;x=x+1;
}

嵌套,外部内能给内部内用,内部内不能给外部内用

function f1() {var x=1console.log('外部'+x)function f2() {var y=x+1console.log('内部:'+y)}f2()var z=x+y;console.log('底部'+z);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oU0QnSdZ-1636732352380)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211022220230453.png)]

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

function f1() {var x=1console.log('外部'+x)function f2() {var x=2console.log('内部:'+x)}f2()}

内部变量和外部变量重名,会由内到外查找(就近原则),会自动屏蔽外部变量

提升变量的作用域

<script>'use strict';function f1(){var x='x'+y;console.log('x');var y='y';}

结果:Xundefined

当未定义y调用的时候,JS引擎会自动默认提升y的申明,但是不会提升赋值。

这个在JavaScript建立之初就存在的特性。

养成规范:所有的变量的定义都写函数头部,不要乱放,方便代码的维护。

function f1(){var x=1;var y=x+1;
//  z,v..//以后随便用
}

全局函数

var x=1;
function f1(){console.log(x);
}
f1();
console.log(x);

全局对象window

var x=1;alert(x);window.alert(x);var old_alert =window.alert(123);//alert失效了var  old_alert= function (){}//恢复window.alert= old_alert;window.alert=old_alert(456);

JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错RefrenceError

规范

由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的全局变量,冲突——>如果能够减少冲突?

结果:ReferenceError: x is not defined

<script>//报错内外都没定义直接使用,找不到xwindow.alert(x);
</script>

结果:x is not defined

把自己的代码全部放入自己定义的唯一空间名中,降低全局命名的冲突问题

jQuery=$()

//定义全局变量var chenmingwei={};//添加属性chenmingwei.name='chengmingwei';chenmingwei.age=20;chenmingwei.add=function (a,b) {return(a,b);}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTf1erxo-1636732352381)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211024220851302.png)]

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

function aa() {//建议使用let解决局部变量冲突的问题for (let i = 0; i <100 ; i++) {console.log(i)}//var全局作用冲突的作用console.log(i+1);}

建议大家都是用let去定义局部作用域的变量:

常用const

在Es6,怎么定义常量:只有用全部大写字母重命名的就是常量;建议不要修改它的值。

 var PI='3.1415';console.log(PI);PI=123;console.log(PI);

在Es6引入了常量关键字const

 const PI='3.1415';console.log(PI);PI=123;console.log(PI);

结果:Assignment to constant variable.

4.3、方法

var chenmingwei={name:'chenmingwei',birth:2000,age:function(){now=new Date().getFullYear();//this 指向它return  now-this.birth;}//属性chenmingwei.name//方法chengmingwei.age()

拆开写

function getAge() {now=new Date().getFullYear();return  now-this.birth;}//拆开var chenmingwei={name:'chenmingwei',birth:2000,age:getAge}//调用的方法写方法名不用写括号

直接调用getAge不会返回数据,结果NaN。因为这个方法this指向了对象chenmingwei

Apply定向指向对象

在js中可以用apply控制this的指向

getAge().apply(chenmingwei,[])

 function getAge() {now = new Date().getFullYear();return now - this.birth;}//拆开var chenmingwei={name:'chenmingwei',birth:2000,age:getAge}getAge().apply(chenmingwei,[]);//指向对象chenmingwei,参数空参

5、内部对象

标准对象

typeof '123'
'string'//字符
typeof 123
'number'//数字
typeof  []
'object'//数组
typeof  {}
'object'
typeof true
'boolean'//布尔
typeof  undefined
'undefined'//未定义
typeof  Math.abs
'function'//函数

5.1、DATE日期

基本使用

var now=new Date();now.getFullYear();//年now.getMonth();//月now.getDate();//日now.getHours();//时now.getSeconds();//秒now.getMinutes()//分now.getDay();//星期now.getTime();//时间戳//转换成本地时间

转换

now.toDateString
now.toLocaleString();
结果:'2021/10/25 上午10:38:09'

5.2、JSON

json是什么

早期,所有数据传输习惯使用XML文件!

  • JSON(JavaScript Object Notion,JS对象简朴)是一种轻量级级的数据交换格式。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效提升网络传输效率

在JavaScript一切皆是对象、任何js支持的类型都可以用JSON来表示,

  • 对象用{}
  • 数组用[]
  • 所有的键值对都是用key.value

JSON字符串和JS对象的转化

JSON.stringify—转字符串

JSON.parse_解析

var user={name:'chenmingwei',age:20,sex:'男'}//对象转JSON字符串var jsonUser=JSON.stringify(user);//JSON字符串转对象   Parse解析var   obj=JSON.parse('{"name":"chenmingwei","age":20,"sex":"男"}')
//{name: 'chenmingwei', age: 20, sex: '男'}

JSON和对象区别

var obj={name:'chenmingwei',age:20};
var json={"name":'chenmingwei',"age":20};

5.3、Ajax

  • 原生的js写法 xhr 异步请求
  • JQuery封装好的方法$("#name").ajax("")
  • axios请i求

6、面向对象编程

原型对象

javascript、java、c#。。。面向对象;javascript有什么区别!

类:模板 原型对象

对象:具体的实例

类是对象的抽象,对象是类的一个具体表现

在JavaScript这个需要换一下思维

原型:

xiaoming.proto = obj; //前后两个下划线

var obj={name:'chenmingwei',age:20,pb:function(){console.log(this.name+'+return')}};//继承obj的属性和方法var  xiaoming={name:'xiaoming'};var   Bird={fly:function{console.log(this.name+"fly")}};//可以继承父类全部数据,有的就替换//继承方法1  原型对象xiaoming.__proto__ = obj;
//小明的原型是objxiaoming.__proto__ = Bird;  //继承方法2Object.setPrototypeOf(xiaoming,obj);
function  student(name) {this.name=name;}//增加一个方法,原型继承student.prototype.hello=function () {alert('JAVA')}

class继承

class关键字,在ES6引入的

1、定义一个类,属性,方法

class student{constructor(name) {this.name=name;}hello(){alert('狂神')}
}
var xiaoming=new student('xiaoming')
//调用——xiaoming.hello()

2、继承

class  xiaostudent{constructor(name,age) {this.name=(name);this.age=function () {alert('今年3岁了')}}}var xiaoming=new student('xiaoming')var xiaohong=new xiaostudent('xiaohong')//xiaohong.age()

本质:查看原型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUxM6VD7-1636732352383)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211025192009259.png)]

原型链

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIHfE1W6-1636732352384)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211025194358920.png)]

7、操作BOM对象(重要)

浏览器介绍

JavaScript和浏览器有什么关系?

JavaScript诞生就是为了能够让他在浏览器中运行!

BOM:浏览器对象模型

  • IE6~11
  • Chrome
  • Safari
  • FireFox

三方:

  • QQ浏览器
  • 360浏览器

Window(重要)

window代表 浏览器窗口

window.innerHeight
406
window.innerWidth
923
window.outerHeight
419
window.outerWidth
222

Navigator

Navigator封装了浏览器的信息

Navigator.arguments

大多数时候,我们不会使用Navigator对象,因为会被人修改!

不建议使用这些属性来判断和编写代码

screen

代表屏幕尺寸

screen.width
1536px
screen.height
864px

location(重要)

location代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/"
protocol: "https:"
reload: ƒ reload()//刷新网页
//设置新地址
location.assign('https://www.baidu.com')

document(内容)

document代表当前页面,HTML,DOM文档树

document.title
'百度一下,你就知道'
document.title='你是个大傻逼'
'你是个大傻逼'

获取具体的文档树节点

<dl  id="app"><dd>java</dd><dd>C++</dd><dd>C语言</dd>
</dl>
<script>var dl=document.getElementById(app);
</script>

获取cookie

document.cookie

劫持原理

www.taobao.com

<script src="aa.js"> </script>
//恶意人员:获取你的cookie

history

history代表浏览器的历史纪录

history.back()//后退
history.forward(//

8、操作DOM对象(重要)

核心

浏览器网页就是一个Dom树形结构!

  • 更新:更新Dom节点
  • 遍历dom节点:得到Dom节点
  • 删除:删除一个Dom节点
  • 添加:添加一个新节点

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

8.1、获得dom节点

<div  id="father"><h1>标题一</h1><p  id="p1">段落1</p><p  class="p2">段落2</p>
</div>
<script>'use strict';var h1=document.getElementsByTagName('h1');var p1=document.getElementById('p1');var p2=document.getElementsByClassName('p2');//获取父节点下的全部子节点var children=father.children;var firstchidren=father.firstChild;//第一个孩子var lastchildren=father.lastChild;//最后一个孩子var p1text=p1.textContent;//下一个孩子
</script>

这是原生代码,之后我们尽量使用JQuery

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bh9KRwsy-1636732352386)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211026133237990.png)]

8.2、更新节点

  • id1.innerText='abc';修改文本的值
  • id1.innerHTML='<a href="">超链接修改文本的超文本标记语言
  • id1.style.color='red'; id1.style.fontFamily='楷体'修改文本的样式
<div id="id1"></div>
<script>var id1=document.getElementById('id1');id1.innerText='abc';id1.innerHTML='<a href="">超链接</a>';id1.style.color='red';id1.style.fontFamily='楷体'
</script>

8.3、删除节点

删除节点的步骤:先获取父节点,再通过父节点删除自己

<div  id="father">
<h1>标题一</h1>
<p  id="p1">段落1</p>
<p  class="p2">段落2</p>
</div>
<script>//通过父类删除子节点var self=document.getElementById('father');self.removeChild(p1);//获取子节点的父亲然后删除var father=p1.parentElement;father.removeChild(p1)
</script>
//删除一个动态的过程
father.removeChild(father.children[0])
father.removeChild(father.children[1])
father.removeChild(father.children[2])

注意:删除多个节点的时候,children是时刻变化的,删除节点的时候一定要注意!

8.4、插入节点

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

‘追加’

<p id="js">javaScript</p>
<div id="list"><p id="se">javase</p><p id="ee">javaee</p><p id="me">javame</p>
</div><script>var js=document.getElementById('js');var list=document.getElementById('list');//追加list.appendChild(js);</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ux8DWkhX-1636732352387)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211026151051777.png)]

创建一个新节点(实现插入)

<p id="js">javaScript</p>
<div id="list"><p id="se">javase</p><p id="ee">javaee</p><p id="me">javame</p>
</div><script>var js=document.getElementById('js');var list=document.getElementById('list');//追加list.appendChild(js);//创建一个节点newPvar newP=document.createElement('p');//新节点赋id选择器newP.id='id1';//修改文本newP.innerText='Hello,Word!';//追加list.appendChild(newP);
//创建一个标签
var  mystyle=document.createElement('style');//创建一个空style
mystyle.setAttribute('type','text/css');
mystyle.innerHTML='body{background-color: red;}'//设置标签内容
document.getElementsByTagName('head')[0].appendChild(mystyle);</script>

insertbefore

<p id="js">javaScript</p>
<div id="list"><p id="se">javase</p><p id="ee">javaee</p><p id="me">javame</p>
</div>
<script>
var js= document.getElementById('js');
var list= document.getElementById('list');
var ee=document.getElementById('ee');
list.insertBefore(js,ee);
</script>

9、操作表单

<form action="post"><span>用户名:</span><input type="text" id="usename"><br><p><span>性别:</span><input type="radio" name="sex" value="man" id="man">男<input type="radio" name="sex" value="girl" id="girl">女</p></form>
<script>'use stricr'var usename     = document.getElementById('usename');var man_radio   = document.getElementById('man');var girl_radio  = document.getElementById('girl');//获取usename的值usename.value;//修改usename的值usename.value='hello  word!'
//对于单选框,多选框等等固定的值,man_radio,value只能取到当前的值//判断是否会选中、查看返回的结果,是否为ture,如果为ture,则选中man_radio.checked=ture//赋值girl_radio.checked
</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1CKEX8y-1636732352389)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211026183553819.png)]

MD5算法加密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jVrS3i1u-1636732352390)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211026223503440.png)]

按钮-绑定事件onclick

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>表单的验证</title><!--MD5算法共工具类--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<form action="#" method="post" onsubmit="aa()">
<p><span>UserName:</span><input type="text" name="username" id="username">
</p><p><span>PassWord:</span><input type="password" name="psd" id="input_password"></p><input type="hidden" id="password"><!--绑定事件onlink被点击-->
<button type="submit" onclick="aa()">提交</button>
</form>
<script>function aa() {var uname = document.getElementById('username');var pwd = document.getElementById('input_password');var MD5d = document.getElementById('password');MD5d.value=md5(pwd.value);/*console.log(uname.value);console.log(pwd.value);uname.value=md5(uname.value)pwd.value=md5(pwd.value)*/}
</script>
</body>
</html>

表单提交-绑定事件- return ‘onsubmit‘

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>表单的验证</title><!--MD5算法共工具类--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<form action="https://www.baidu.com/" method="post" onsubmit="return aa()">
<p><span>UserName:</span><input type="text" name="username" id="username">
</p>
<p><span>PassWord:</span><input type="password"  id="input_password">
</p><input type="hidden" id="md5_pwd" name="password"><button type="submit">提交</button></form>
<script>function aa() {var uname = document.getElementById('username');var pwd = document.getElementById('input_password');var md5_pwd = document.getElementById('md5_pwd');//pwd.value=md5(pwd.value);md5_pwd.value=md5(pwd.value);return  true;}
</script>
</body>
</html>

注意:使用隐藏的标签hidden,password的name标识取消,写道的hildden里才能成功加密!

10、jQuery

javascript

jQuery库,里面存在大量的javascript

获取jQuery

URL:https://jquery.com/

CDN外部引入和本地引入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKv0UGsj-1636732352392)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211027110855632.png)]

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery</title>
<!--cdn 外部在线引入--><script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script><!--    本地jQuery--><script src="lib/jquery-3.6.0.js"></script>
</head>
<body></body>
</html>

公式:$(selector).action()

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jQuery</title>
<!--    本地jQuery--><script src="lib/jquery-3.6.0.js"></script>
</head>
<body>
<a href="" id="id1">点击我跳转</a>
<script>//var id=document.getElementById(id)$('#id1').click(function () {alert('123')})
</script>
</body>
</html>

选择器

<script>//标签document.getElementsByTagName()//iddocument.getElementById()//classdocument.getElementsByClassName()//jQuery   css中的选择器全部能进$(selector).action()$('#id1').click()$('.class1').click()
</script>

工具网站:https://jquery.cuishifeng.cn/

事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdGXPJby-1636732352393)(C:\Users\陈明伟\AppData\Roaming\Typora\typora-user-images\image-20211027171908464.png)]

通过jQuery控制鼠标的移动mousemove,获取鼠标当前的位置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>事件</title><style>#div{width: 500px;height: 500px;border: 2px solid red;}</style><script src="lib/jquery-3.6.0.js"></script>
</head>
<body>
mouse:<span id="mouse"></span>
<div id="div"></div>
<script>//获取到整个文档的节点  ready载入/*$('document').ready(function () {$('#div').mousemove(function (e) {$('#mouse').text('x:'+e.pageX+'y:'+e.pageY);})})*///等价上面$(function () {$('#div').mousemove(function (e) {$('#mouse').text('x:'+e.pageX+'y:'+e.pageY);})})</script>
</body>
</html>

自我小练习,点击出弹窗

<a href="#" id="my_a">点击我出弹窗!</a><script>$(function () {$('#my_a').mousedown(function () {alert('123')})})
</script>

jQuery操作Dom

<ul id="list"><li id="id1">javacript</li><li id="id2">Phtyon</li>
</ul>
<script>$(function () {$('#list li[id=id1]').text()//获取当前值  $('#list li[id=id1]').text('12')//重新赋值$('#id2').html('<em>哈哈哈</em>')//g$('#id2').css("color","red");//修改样式})
</script>

})

```

选择器

<script>//标签document.getElementsByTagName()//iddocument.getElementById()//classdocument.getElementsByClassName()//jQuery   css中的选择器全部能进$(selector).action()$('#id1').click()$('.class1').click()
</script>

工具网站:https://jquery.cuishifeng.cn/

事件

[外链图片转存中…(img-UdGXPJby-1636732352393)]

通过jQuery控制鼠标的移动mousemove,获取鼠标当前的位置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>事件</title><style>#div{width: 500px;height: 500px;border: 2px solid red;}</style><script src="lib/jquery-3.6.0.js"></script>
</head>
<body>
mouse:<span id="mouse"></span>
<div id="div"></div>
<script>//获取到整个文档的节点  ready载入/*$('document').ready(function () {$('#div').mousemove(function (e) {$('#mouse').text('x:'+e.pageX+'y:'+e.pageY);})})*///等价上面$(function () {$('#div').mousemove(function (e) {$('#mouse').text('x:'+e.pageX+'y:'+e.pageY);})})</script>
</body>
</html>

自我小练习,点击出弹窗

<a href="#" id="my_a">点击我出弹窗!</a><script>$(function () {$('#my_a').mousedown(function () {alert('123')})})
</script>

jQuery操作Dom

<ul id="list"><li id="id1">javacript</li><li id="id2">Phtyon</li>
</ul>
<script>$(function () {$('#list li[id=id1]').text()//获取当前值  $('#list li[id=id1]').text('12')//重新赋值$('#id2').html('<em>哈哈哈</em>')//g$('#id2').css("color","red");//修改样式})
</script>

1.什么是Javascript相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  3. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  4. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  5. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  6. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  7. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  8. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  9. [JavaScript] JavaScript 数组挖掘,不只是讲数组哟

    课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...

  10. linux下用js生成xml,js2xml:将javascript字符串转换为xml

    有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...

最新文章

  1. Xcode 5.0.1安装插件:规范注释生成器VVDocumenter + OSX 10.9.2
  2. Android之上下文菜单创建
  3. iframe给php传值,向iframe传递参数
  4. oracle job 及存储过程案例
  5. python列表所有元素平均值_【全网最简单Python教程】--10.列表元素的索引和返回索引值(Index函数使用)...
  6. 源文件py编译为pyc文件
  7. 简单学生成绩管理系统Java版(GUI+Microsoft Access数据库)
  8. Android超精准计步器开发-Dylan计步
  9. mysql数据库证件脱敏_mysql对身份证号码进行脱敏处理
  10. 《SPSS从入门到精通》笔记(1-4章)
  11. Python基础七 元组、字典、集合
  12. 如何注销/删除MSN帐号(Windows Live ID)
  13. 全球及中国石头纸行业发展动态与投资现状分析报告2022版
  14. OpenCV开发笔记(五十一):红胖子8分钟带你深入了解透视变换(图文并茂+浅显易懂+程序源码)
  15. C语言---char *与const char *
  16. 递归算法的原理(js)
  17. 详解python中readlines函数的参数hint
  18. java反射机制详解篇一(基础)
  19. 龙格现象 matlab,拉格朗日插值龙格现象的matlab实现
  20. 解读CVPR2020图像翻译最新算法

热门文章

  1. 微博改变一切_苹果官方微博“Apple支持”上线
  2. Android之翻转静音
  3. MyApps Iscript常用代码
  4. OBS Studio 窗口采集game-capture注入之OpenGL与D3D11的GPU资源进行互操作
  5. 【转】.net 在线播放各类视频
  6. ruby-0.49源码分析
  7. 第39级台阶 递归
  8. html怎样给label设置长度,HTML label 标签
  9. office 2019后的功能更新亮点
  10. O-RAN专题系列-33:关于O-RAN常见问题的进一步澄清