javascript前端

 包含es+dom、bom+jQuery

ECMAScript:规定了JavaScript的编程语法和基础核心内容

DOM:操作页面中的元素。

BOM:是一套编程接口,重点用于实现交互效果。用于对浏览器进行操作,如刷新页面、弹出警告框、控制页面跳转等。(相关对象、窗口事件以及定时器,浏览器刷新跳转)

正则表达式:对字符串进行处理,重点应用于进行表单验证。

Web服务器与Ajax:数据从服务器动态获取,会随操作发生改变。

jQuary:用于简化DOM和Ajax代码

一、js注释

单行注释://

多行注释:/*     */

补充:改变多行注释快捷键:vs做下角设置图表中,点击键盘跨界方式,找到shift+ait+A进行修改

二、js输入输出语句

常用输出输入内容:prompt(用户输入内容,弹出输入框)、console.log(浏览器控制台打印输出信息)、alert(弹出警示框)、document.writer('打印的内容可以识别标签')

b169482ece2e4c3c911a85ba45ee14e2.png(弹出输入框)f6276075c71a4d709d75e735e5406b2d.png(在控制台给程序人员看的)

注:prompt接收到的字符串类型!!!

三、变量:向内存申请的一部分存储空间

变量名规则:不能以数字开头,不能含有运算符,严格区分大小写,不能使用关键字作为变量名。

命名规则:使用字母数字下划线或者$美元符号、尽量见名知意、驼峰命名法。

常见的关键字:const声明常量、function定义函数、typedef检测变量的数据类型

声明变量:var 变量名;

赋值:变量名=值;

注:只声明未赋值输出返回的是:undefined(未定义的)

45a8f91f028c47259b9f3bb46223c51b.png(存取用户输入的内容)

四、数据类型

只有根据赋的值才可以确定数据类型,js的数据类型是会变的!!!

简单数据类型:number数字型(NaN非数值)、boolean布尔值型、string字符串型(推荐使用单引号),undefined

复杂数据类型:object

数组、函数和正则表达式都属于对象。

记住:js中八进制前面加0,十六进制前面加0x

记住:可以通过is NaN判断是否为数字:isNaN(数字):判断该数字是否为数字返回true和false

字符串转义符:\n换行符、\\斜杠、\‘单引号、\”双引号、\b空格(在字符串中使用)

字符串长度:变量名.length;

字符串拼接:+拼接(字符串和其他类型拼接最终结果都是字符串)

拓展:两个字符串型中间拼接一个变量数字型:7d0eb18375bf4e47b2a084a4645384ab.png(使用变量名)

检测变量的数据类型:typeof 变量名

检测是否为数字:isNAN(值/变量名)

转换为字符串的方式:

891a765967584305b88389bbb6044541.png

9c0942c947d34d568d5ca1d4e59f2e6b.png(编写代码输出今年的年龄)

布尔类型数据为false的值:空字符串、数字0、NaN、null、undefined

将数据转换为数字型类型的函数:parseInt()、parseFloat()、Number()

将数据转换为字符串型:String(变量名)、toString()

五、运算符

算数运算符:+、-、*、/、%(%运算结果正负取决于左边书的正负)

递增运算符,递减运算符:++、--

比较运算符:< > >= <=   !=  ==(会默认转换数据类型)   ===(全等,值和类型都相等)

逻辑运算符:&&  ||   !

&&:如果

赋值运算符:=   -=   +=  *=   /=   %=

将数据类型转换为数值型:parseInt(待转换的值)、parseFloat(待转换的值)、Number(待转换的值)

浮点数精确函数:变量名.ToFixed(小数点后数字的个数),超过该范围会自动四舍五入,如果省略括号中的数值自动默认值为0.                             注意:该方法返回的值是字符串

将数据转换为字符串型:变量名.ToString()      注意:括号中可以设置参数设置输出的进制类型

需要由于prompt获取的是字符串类型先将变量c转换为数值型才能进行四舍五入

六、数组:[]包裹

数组是一组数据的集合,每个数据成为元素,数组中可以存放任意类型的元素

创建数组的两种方式:(索引从0开始)

1.利用new创建数组(Array系统内置数组对象!!!)

606e12ae67654c0983eaec4d39e2430c.png

2.利用数组变量名创建数组:var arr2=[1,'a',"aaa",true];

数组的长度:数组名.length();

数组新增的元素:

修改length长度扩容(有多的empty空元素)

七、函数:function

函数的使用:声明函数、调用函数

声明函数:

function 函数名(参数列表){ 函数体;}    (函数名一般为动词,不调用不执行)

var 变量名=function(){  };//该函数没有名字称为匿名函数

调用函数:函数名();

函数的参数:形参和实参

函数的返回值:return 结果;

arguments伪数组使用:当前函数的内置对象,arguments存储传递的所有实参(形参可以不设置)

ea8ebb2ef8b54a97852b41fdf1f2016b.png

八、作用域:变量在某个范围内作用和起效果

es6全局作用域和局部作用域:

全局作用域:整个script标签

局部作用域:在函数内部就是局部作用域

变量:全局变量和局部变量

全局变量:全局都可以使用

局部变量:在局部作用域下的变量

九、对象(Object):对象是一个具体的实物:{}包裹

对象是一个无序的相关属性和方法的集合,万物皆对象!(用来保存一个人完整的信息)

对象由属性和方法组成:

属性:事物的特征

方法:事物的行为

创建对象三种方法:利用字面量{}创建方法、利用 new object创建对象、利用构造函数创建对象

1.利用字面量创建方法: var obj={    };//方法就是后面跟一个匿名函数

6100a265bc2a4c2a98bf7ce81a078581.png(最后一个属性不用跟逗号!,sayHi表示方法名)

调用对象的属性:对象名.属性名;

调用方法:对象名.方法名();

2.利用new Object创建对象:var obj=new Object();创建一个空的对象

(Object系统自带的内置对象函数)

赋值:obj.属性名=属性值;obj.方法名=function(){匿名函数体};
3.利用构造函数创建对象:利用构造函数的过程也称为 

构造匿名函数:利用函数: 重复这些相同的代码和属性,里面封装的是对象(又叫做继承)规范:构造函数首字母大写(类似java的类)

335ed6595735406bb26c8d72bf7aed49.png(this必须指向当 前的)

6f30b9f367df490e910778157d2ecbe6.png(值就是传进来的参数,可以批量生成对象  )

注:只要调用new star()就创建一个对象{}

new关键字执行过程:先创建一个空的对象,this指向该空对象,接着执行函数里的代码给这个空对象添加属性和方法,返回该对象

遍历对象:for in遍历对象

for(变量k或者key  in 对象名){遍历对变量操作};

00ea3185b2b04935bae893989027041b.png(k相当于是属性的序号)

十、内置对象:Math、日期、数组、字符串

js对象包含:自定义对象、内置对象(前两者属于ES)、浏览器对象(js独有的)

内置对象:js自带的一些对象,提供常用的基本的功能(属性和方法)

学习前端查阅文档的网站:mdn或者w3c    链接🔗:MDN Web 文档 (mozilla.org)

1.Math对象:不是一个构造函数,不需要new来调用直接使用

bd737836826f40f7a16a1b720b6895b8.png(直接Math.函数名()调用即可)

b0af23763d97450a9463104ccf3e9593.png

2.Date对象:处理日期和时间,是一个构造函数!!!,必须使用new调用 

1ad52f0a6052474c8d33140cb3962138.png8e6f3392138446a09e1d6092bf1055a9.png

如果没有参数,则返回当前系统的时间;

dd18de7e08e24cde8adc062ebdb21a44.png

使用:Date.方法名();

案例:京东秒杀倒计时,只能使用时间戳转换为毫秒数再相减!!!

  模板:         var d=parseInt(tims/60/60/24);

            var h=parseInt(tims/60/60%24);

            var m=parseInt(tims/60%60);

            var s=parseInt(tims%60);

daaba40233b44334846f82840c24207a.png9b8e3fe56642493c9e3063d4954214b9.png

计算毫秒数的方法:bbb1b5cb46e64b01aeea578bc7b8736f.png(+new Date()最常用)

3.数组对象Array:

例如:创建数组对象使用new:var arr=new Array(可以限制长度);//表示创建一个数组对象

cd8c8acd20d7471db09dde3040008e1c.png

检测是否为数组:

法一:数组名 instanceof Array;如果是则返回true

 法二:Array.isArray(数组名):返回true和false

添加删除数组元素:

push(添加元素的值):数组的末尾添加数组元素一个或多个(push完毕返回的是新数组的长度)

unshift(添加元素的值):在数组的开头添加数组元素

pop():删除数组的最后一个元素

shift():删除数组的第一个元素

数组索引方法:

 indexOf(数组元素值):返回第一个满足条件数组元素的下标索引号(若找不到则返回-1)

lastIndexOf(数组元素):返回最后一个满足条件数组元素的下标索引号(若找不到则返回-1)

数组转换为字符串:

1.数组名.toString():将数组转换为字符串

2.join里面没可以跟分隔符:数组名.join(自定义分隔符)

b67dfa36c44e499083e979fdb66fe3b9.png

string字符串对象:

字符串值不可变!!,只是地址变了新开辟了内存空间,因此不要大量拼接字符串,会产生大量空间

 根据字符返回位置:

indexOf(‘要查找的字符’):返回在字符串中第一次出现的下标

lastIndexOf(‘要查找的字符’):返回在字符串中最后一次出现的下标

 拼接和截取字符串:

拼接:+

截取:substr(开始索引号,截取长度)、slice(开始位置,结束位置)、substring(开始位置,结束位置)

十一、简单基本类型与复杂类型:

1.简单数据类型:string、number、boolean、undefined、null

简单数据类型放在栈中保存(变量对函数传参对变量本身值没有影响!!!)

2.复杂类型:通过new关键字创建的对象(系统(Object、Array、Date)、自定义)

存放在堆中变量名指向堆的地址!

十二、Web APIs和JS关联:

JS分为es基础语法+(BOM+DOM)

API和WEB API :前者是应用程序的接口,后者是浏览器功能和页面元素的API(BOM+DOM实现交互效果)

十三、DOM:为了修改js,js 有一套自己的编程接口

1.获取元素:(该内容script标签写在</body>上面)

(1)、通过id获取:ducoment.getElementById('id名')

该语句返回整个标签以及文字内容;

e02d4a484eb4458bb8cb2f7faf251629.jpeg

(2)、通过标签名获取:ducoment.getElementByTagName('标签名')

返回的是获取的元素的集合!遍历节点:节点名.length;该集合索引从零开始

6f9d211db977476e88be80b78dc02dcb.jpeg

(3)、通过类名获取:ducoment.getElementClassName('类名')(支持的版本较高)

ded1bc448bf6473d892af39d670b161f.png

2.操作元素:节点都要获取!!

(1)、改变元素内容

节点.innerText(不会识别html标签,标签也会显示,并且显示会自动去除空格和换行)

节点.innerHTML(可以识别标签)

(2)、修改属性:节点.属性名=新属性值(例如轮播图图片src进行修改)

d1827ffa62fa4118a7f710f2efd66ee4.jpeg

(3)、操作表单:表单内容的值是通过value来修改的

改变表单的值value:节点.value='值'

disabled被禁用:节点.disabled=true(表示被禁用)或者使用this.disabled=true(这里的this指时间调用函数调用者也就是节点)

d64f9ef3e4fa4fbcb58d3885946673fb.jpeg

(4)、修改样式:

值必须加单引号!!!

节点样式修改少:节点.style.属性名=值;

节点样式修改多:节点.className=新类名;(直接将新类的所有样式替换给当前类,但也会改变当前标签的类名)

十四、事件:被js侦测到的行为并作出操作响应机制

(触发相应的一种机制)例如:点击按钮会切换也米娜或者弹出对话框

1.事件三要素:事件源、事件类型、事件处理程序

格式:事件源.事件类型=function(){ 执行时间代码块;    };

(1)、事件源:便是谁被触发需要先获取。

(2)、事件类型:便是如何触发

一般有:鼠标单击(onclick)、鼠标经过onmouseocer、鼠标按下(onmousedown)

e252e63699e1470dac6aa26023eeed9b.jpeg

(3)、事件处理程序:触发响应的机制,时间

2120fc816efb4eb8a3a24d7afe5f9746.jpeg

十五:操作元素(改变元素内容、修改属性、操作表单信息value、修改样式)

都要获取节点!!!

1.改变元素内容:innerText、innerHTML

节点.innerText:改变节点内容,但是若内容中含有html标签则取法识别

节点.innerHTML:改变元素内容,会识别标签并进行显示

2.修改属性:(例如:轮播图修改图潘src属性即可跳转)

节点.属性名=‘新属性值’

3.操作表单:(value改变表单的值,表单被禁用,type改变)

value改变表单的值:节点.value=‘值’(改变表单显示的值)

disabled:节点.disabled=true表示已经被禁用(或者使用this.disabled=true,this表示事件函数调用者)

4.修改样式:

节点样式修改少的:节点.style.属性名=属性值

样式修改多:节点.className=新类名(直接修改新类名对应新样式)

补充:对某内容后者节点进行隐藏或者显示(display:none表示隐藏元素;display:block表示显示元素)

十六:自定义属性操作:

不能通过(节点.属性)获取值,由于不知系统自带的属性值

1.获取属性值:节点.getAttribute('属性')

节点.属性名(只能获取内置自带属性)

节点.getAttribute('属性'):可获取自定义属性(属性直接写在标签内部)

2.设置属性值:节点.setAttribute(‘属性’,‘值’)

节点.属性=值,如果是新建可以直接进行设置,不用新建!!

节点.setAttribute(‘属性’,‘值’):主要针对自定义属性

3.移除属性值:节点.removeAttribute

十七:h5规定自定义属性:属性名date开头

h5新增获取自定义属性值:节点.dataset.(属性名date后面的部分)

十八:节点操作:(DOM中节点用node表示)

补充:document.querySelector(‘css选择器’)经常用!!!!

节点层级:

1.利用父子节点获取:

父级节点:节点.parentNode(得到的是离父元素最近的节点)

子节点:parentNode.childNodes所有子节点(不支持使用,会获取文本节点(换行空格等也算一个节点))

解决办法:通过NodeType判断节点类型数值(若为1则是元素节点,若为3则为文本节点不操作即可)

非标准:parentNode.children获取所有子元素节点

第一个子节点:parentNode.firstElementChild获取第一个节点(设置了Element则限制了元素节点)

最后一个节点:parentNode.lastElementChild获取第一个节点(设置了Element则限制了元素节点)

子节点个数可以用length计算!!!

2.兄弟节点:(标签为并列关系)(了解,用的少)

由于IE9版本以上的浏览器才支持

下一个节点:node.nextElementSibling

上一个节点:node.previousElementSibling

3.创建以及增加节点:(按照父子关系添加)

为页面写动态新增内容

var 父节点=document.createElement('标签名')

父节点.appendChild(孩子节点):追加放在最后

父节点.insertBefore(孩子节点,指定某元素前(使用子元素的下标))

页面想要添加新元素:必须先创建元素,再添加元素

4.删除节点:

获取的父节点.removeChild(子节点):删除父节点的子节点(动态的删除)

5.复制节点:

节点.cloneNode()返回一个节点(括号中为空或者为false表示浅拷贝不复制标签内容,true表示复制标签内容)

十九:创建元素(write、innerHTML、createElement)

document.write(html标签+文字内容)//弊端:会重新加载一个新页面进行显示

innerHTML

createElement('标签名'):推荐使用

二十:DOM高级事件

1.元素注册事件的两种方式:

传统方式:节点.事件名=function (){引起事件发生的程序代码块};

有一个特点:事件名都是on 开头的

ff1b7af169184d3cac915f97f1dc10b6.png

 (也可以把事件写在便签内部!!!)

弊端:只能对一个节点设置一个事件,若设置两个或多个事件前面事件都会被覆盖,具有唯一性

方法监听注册方式:attachEventListener(事件类型,事件处理函数function (){},可选参数)

特点:同一个元素同一个事件可以设置多个监听器

bef66dd719f2460689d3742627fa4af4.png

 623278d1f6394b64812ecc597e74dca6.png

注意:事件类型不加on ,一定要加引号

1baaf1599a2a41ce847441862d84bc05.png

attachEvent (事件类型,事件处理函数)非标准

此时的事件类型要加on 并且也要加单引号!!!

2.删除事件:该事件使用完一遍后删除事件

传统方式:节点.事件名=null 

2ad8d0149ebd4e2aa255df325c94ce88.png

 监听删除:removeEventListener(事件名,函数名)

注意:创建事件时,函数不能为匿名函数,调用时不能加括号!!!

3.DOM事件流:

7304c279907546898ee1b87fd02c9998.png

addEventListener(类型,函数,控制哪个阶段) 

如果第三个阶段为true 则处于捕获阶段

捕获阶段:从外层开始传播,依次找是否有点击事件

如果第三个参数为false 或者省略不写,则处于冒泡阶段

4.事件对象:创建事件时函数的参数就是事件对象(写在监听函数的小括号内部)

0efc05ac001345f79b8459754aa0b7a8.png

只有有了事件,事件对象才会存在,是系统自动创建的,该事件对象包含事件的全部信息 

事件对象名字自己定义,常用:e  event   evt 

5.事件对象常见的属性和方法

7892da49fe2e494da710f48b82e7141b.png

e.target :触发事件的对象

dc2749c07d6d46d68500917551affa18.png

利用冒泡捕获,this 是指向绑定

e.type 返回事件类型

e.preventDefault():阻止默认事件行为,例如:阻止页面跳转

return false 没有兼容性,可以阻止页面跳转

6.事件委托:事件代理(JQUary中叫做事件委派)

避免访问DOM的次数多,会延长整个页面的交互时间!!!

(1)、事件委托原理(面试常问):不是每个字节点单独设置事件监听器,而是事件监听器设置在父节点上,利用冒泡原理影响设置每个子节点(只操作了一次DOM)

(由冒泡原理会一次向上冒泡到ul,可以通过e.target获取当前被点击的对象)

(e.target获取当前被点击的元素)

7.常用的鼠标事件:

(1)、普通的网页内容用户是可以直接进行复制的。可以通过禁止鼠标右键

(contextmenu阻止右键行为,也是一个事件类型)

 (阻止默认事件对象,e.preventDefault())

(2)、禁止选中文字

(3)、鼠标事件对象:(事件对象默认是监听函数的参数)

鼠标事件对象:MouseEvent表示该事件对象为鼠标事件对象

(打印出来e为MouseEvent)

鼠标事件对象应用:

(打印鼠标在可视区(不看滑动的区域)点击的坐标,文档页面(包括滑动的区域))pagex/y更常用

鼠标经过移动事件:mousemove(鼠标每移动1px数值都会变)

8.键盘事件(keyup)对象e:

keycord属性可以得到用户按下键的ASCII值!

键盘事件:(可以通过返回的ASCII值判断用户按下的是哪个键)

keyup和keydown相同不区分大小写(默认都看成大写)

(keyup在键盘弹起的时候才触发,keydown键盘按下触发)

keypress事件区分字母大小写

  • 30
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值