JavaScript自制笔记

编程入门 行业动态 更新时间:2024-10-09 17:26:06

JavaScript自制<a href=https://www.elefans.com/category/jswz/34/1770047.html style=笔记"/>

JavaScript自制笔记

JavaScript基础

文章目录

  • JavaScript基础
      • 1、输入输出语句
      • 2、变量的声明
      • 3、变量类型
          • ①简单数据类型
          • ②常用函数
      • 4、字面量
      • 5、比较运算符
      • 6、数组
          • 案例:数组转换分割字符串
      • 7、函数
      • 8、预解析
      • 9、全局变量
      • 10、对象
      • 11、构造函数
      • 12、遍历对象
      • 13、内置对象
        • ①Math对象
          • ②Math.random()随机数
        • ③Date对象
      • 14、基本包装类型
      • 15、字符串常用函数
  • Web APIs(DOM BOM)
    • 一、DOM:文档对象模型:
      • 1、获取页面元素:
      • 2、事件基础
      • 3、操作元素
      • 4、鼠标指令
      • 5、键盘指令
      • 6、排他思想
      • 7、获得元素属性
          • ▲重要:自定义属性
      • 8、移除元素属性
      • 9、更改元素属性
      • 10、HTML5的自定义属性规范
    • 二、节点操作:
      • 1、节点类别:
      • 2、创建节点和添加节点
      • 3、删除节点
      • 4、克隆节点
    • 三、事件高级
      • 1、注册事件概述
        • ①传统方式
        • ②方法监听注册方式
      • 2、删除事件
      • 3、捕获阶段、冒泡阶段
      • 4、事件对象
      • 5、对象属性
      • 96、事件委托
      • 7、常用鼠标事件
      • 8、常用键盘事件
      • 9、事件对象
  • 二、BOM
      • 1、页面加载事件
        • load
        • DOMContentLoaded
      • 2、调整窗口大小事件
      • 3、定时器
      • 4、location对象
      • 5、navigation对象
      • 6、history对象
      • 7、PC端网页特效
          • ①offset元素偏移量系列
          • ②client元素可视区系列
          • ③scroll元素滚动系列
          • ④动画函数封装
          • ⑤常见网页特效案例
          • ⑥立即执行函数(匿名函数)
          • ⑦两种鼠标移动事件的区别
          • ⑧缓动效果原理

1、输入输出语句

alert(msg)			//浏览器弹出警示框
console.log(msg)	//浏览器控制台打印输出信息,(在F12中给程序员看的)
prompt(info)		//浏览器弹出输入框,用户可输入

2、变量的声明

var age;		//var  + 变量名  来声明变量

3、变量类型

特点:js是动态语言,变量的类型可以变化

①简单数据类型
Number			//数字型
▲范围为Number.MAX_VALUE~Number.MIN_VALUE(最大值~最小值)
特殊的有:Infinity、-Infinity、NaN(无穷大、无穷小、非数值)
Boolean			//布尔型
▲如果布尔参与运算,true为1,false为0
String			//字符串
▲推荐用单引号,引号内要用引号时,需要“外单内双”,或者用转义字符
Undefined		//未定义
Null			//空值,默认为0
②常用函数

判断是否为数字:

isNaN( ** )		//判断是否为数字,返回true或false

检测字符串的长度:

变量名.length    //返回变量的长度

字符串拼接:

用 + 来拼接,同java

检测数据类型:

typeof 变量名;		//返回数据类型的字符串

转换为字符串:

变量名.toString()
String(变量)		//强制转换
用加号拼接

转换为数字型:

变量名.parseInt(string)	//转int,首字符不是数字则会返回NaN变量名.parseFloat(string)	//转floatNumber()		//强制转换用+ - * / 隐式转换			//z

4、字面量

定义:是源代码中队固定值的一个表示法

5、比较运算符

18 == '18'			//返回true,因为会自动隐形转换'18'==='18'			//数值和类型一样才返回true,不然返回false

6、数组

①数组的声明:用new创建

var 数组名 = new Array();

②字面量直接声明

var arr= [];var arr=[1,2,'zyk',true];	//数组中元素类型可以不同

③数组长度函数

在数组名.length			//返回数组的长度值
案例:数组转换分割字符串
 var arr=['red','green','blue','pink'];      var str='';      for(var i=0;i<4;i++){          str+=arr[i];          str+='|';      }          console.log(str)

④新增数组元素

 var arr=['red','green','blue','pink']; //先修改数组的长度 arr.length=5; //或者直接追加 arr[4]='gray';

7、函数

①声明函数

function 函数名(形参列表【无需数据类型】){	//这里形参可以是数组,仍不用写类型,只要实参是数组即可	函数体;}
方法二:var func(变量名) = function(){	函数体;}调用时:func();

②返回值

function 函数名(形参列表【无需数据类型】){			函数体;	return 结果值;		//无需在声明函数时定义返回值类型,可以返回数组等}

▲如果没有返回值,默认返回undefined

③arguments的使用

定义:当我们不确定有多少形式参数传递的时候,可以用arguments来获取在 Javascript中,arguments实际上是对当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象。中储存了传递的所有实参。

function func(){	console.log(arguments);		//一个伪数组储存了所有的实参也具有length等特性}

④作用域链

如果在一个嵌套的作用域中,访问变量会呈链式查找,如

funcetion a(){	var num = 20;	funcetion a(){		var num = 10;		funcetion a(){			console.log(num);				//从里向外查找,答案是10    	}	}}

8、预解析

描述:Js引擎运行分为两步,预解析和代码执行。预解析,预习Js引擎会把js里面所有的var还有function提升到当前作用域的最前面。然后代码执行,按照书写的顺序从上往下执行。预解析分为变量预解析和函数预解析,变量预解析就是把作用域的最前面,不会提升赋值操作。函数就是把函数声明放到作用域的最前面,不会提升调用操作。

9、全局变量

▲当在局部变量出现一个没有被var修饰的变量,默认是声明了一个全局变量,在全局可用

10、对象

①创建对象的方式:

▲属性采用冒号声明,中各个属性间使用逗号连接,不用声明数据类型

var obj={					//字面量直接创建	name:'朱',	sex:'男',	age:18,	sayHi:function(){	console.log('hello');	}}
var obj= new Object();obj.name='朱玉坤';obj.age=18;boj.sayHi = function(){console.log}

②使用对象的方法:

abj.age				//第一种方式调用obj['age']			//第二种方式调用

11、构造函数

语法:

function 构造函数名(){			//构造函数首字母大写	this.属性=值;	this.方法=function(){		函数体;	}}

函数的调用:

new Star('刘德华',18);			//类似于java的狗崽方法

12、遍历对象

for(变量 in 对象for(var k in obj){	console.log(k);			//输出obj中各个属性名	console.log(obk			//输出对象中的各个属性值}

13、内置对象

对象分为:自定义对象、内置对象、浏览器对象

①Math对象
Math.PI					//圆周率Math.floor()			//向下取整Math.ceil()				//向上取整Math.round()			//四舍五入Math.abs()				//绝对值Math.max()/ min()		//求最大和最小值
②Math.random()随机数
return Math.random()*(max - min + 1) +min		//取min到max之间的随机整数
③Date对象

描述:date对象是一个构造函数,必须使用new来调用

函数的多种形参:new Date( )		//无参数返回系统当前的所有时间new Date(2021,8,7)		//数字型new Date('2021-8-7 23:8:13')

获取时间的函数

getFulYear()	//年份getMonth()		//月份,月份值在0~11之间,所以要+1getDate()		//完整时间getDay()		//当前周几,值在0~6之间,周日返回0getHours()		//小时getMinutes()	//分钟getSeconds()	//秒Date.now(); / getTime(); /+new Date(时间);  //现在距离1970.1.1的毫秒

③Array对象

▲复习

new Array(2)			//代表创建一个2长度的数组nbew Array(2,3)			//代表创建一个元素为2、3的数组

▲新函数:判断对象类型

变量 instanceof 变量类型;			//返回true或false 

▲判断是否为数组

Array.isArray(a);			//返回true或false ,判断是否为数组

▲末尾添加一个或多个元素,会修改原数组,返回值为新长度

对象.push(参数1,参数2...);

▲删除数组最后一个元素,,会修改原数组,长度减一,返回值为被删除的最后一个元素

对象.pop();

▲删除数组第一个元素,,会修改原数组,长度减一,返回值为被删除的第一个元素

对象.shift();

▲在开头添加一个或多个元素,会修改原数组,返回值为新长度

对象.unshift();

▲反转数组元素,返回新数组

对象.reverse();

▲排序数组元素,返回新数组

对象.sort();arr.sort(function(a,b){	return a-b;				//升序排序,不然默认是比较ASCII})

▲返回数组元素索引的方法

var arr=['red','pink','blue'];arr.indexOf('pink');	//返回值为1,有重复的元素会返回第一个出现的下标,如果没有则返回-1(indexOf('pink',可选形参:表示起始位置));arr.lastIndexOf('pink')		//从后向前数索引

▲将数组转换成字符串

var arr=[1,2,3];arr.toString();			//把数组所有元素转换成字符串,元素中间用逗号隔开

▲将数组转换成字符串

arr.join('分隔符');如:	arr.join('-');	arr.join('');

▲连接两个或多个数组,不影响原来的数组

arr.concat();		//返回新的连接好的数组,形参可以是元素,也可以是多个整个的数组

▲截取数组元素

用法:arrayObj - 原始数组;
start - 必填;设定新数组的起始位置;如果是负数,则表示从数组尾部开始算起(-1
指最后一个元素,-2 指倒数第二个元素,以此类推)。
end - 可选;设定新数组的结束位置;如果不填写该参数,默认到数组结尾;如果是负数,则表示从数组尾部开始算起(-1 指最后一个元素,-2
指倒数第二个元素,以此类推)。

arr.slice(begin,end);	//返回截取的新数组例1:获取仅包含最后一个元素的子数组var arr=[1,2,3,4,5];arr.slice(-1);//[5]例2:获取不包含最后一个元素的子数组var arr=[1,2,3,4,5];arr.slice(0, -1);//[1,2,3,4]例3:获取包含 从第二个元素开始的所有元素的子数组var arr=[1,2,3,4,5];arr.slice(1);//[2,3,4,5]

▲数组删除指定区段元素

  1. 删除功能,第一个参数为第一项位置,第二个参数为要删除几个。

用法:array.splice(index,num),返回值为删除内容,array为结果值。

  1. 插入功能,第一个参数(插入位置),第二个参数(0),第三个参数(插入的项)。

用法:array.splice(index,0,insertValue),返回值为空数组,array值为最终结果值。

  1. 替换功能,第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)。

用法:array.splice(index,num,insertValue),返回值为删除内容,array为结果值。

arr.splice(从哪里开始,删除的个数);		//返回数组,会影响原来的数组

14、基本包装类型

①js会把简单数据类型包装成复杂数据类型

var str='zhu';str.length;//等价于以下代码var temp = new String('zhu');str = temp;temp = null;		//销毁临时变量,使str成为对象,再使用length

②字符串常量不会改变,如果再次赋值,只不过是指向了新的地址,新new的对象

15、字符串常用函数

▲返回指定位置的字符

charAt(index);		//返回下标处字符

▲返回指定位置的ASCII

charCodeAt(index);		//返回下标处ASCII,为了判断用户按了键盘哪一个按键

▲获取目标处字符

str[0];		//像是数组直接访问,兼容性不好

▲字符串拼接

str.concat(str2);

▲截取字符串

str.substr(起始位置,多长);

▲替换字符串.

str='andy';str.replace('a','b');		//b替换a,结果为'bndy',且只会替换第一个符合条件的字符

▲字符串转换为数组

str.split('分隔符');

Web APIs(DOM BOM)

一、DOM:文档对象模型:

1、获取页面元素:

①根据ID获取标签

getElementByld();		//可以获取带有ID属性的元素对象,返回值是标签对象//使用语法var element = document.getElementByld(id);		//id 是个字符串

▲打印返回元素对象,更好的查看里面的属性和方法

console.div(对象);	//打印返回元素对象,更好的查看里面的属性和方法

②根据标签名获取

getElementsByTagName();		//返回带有标签名的对象的集合,伪数组//可以用类似数组来使用它的参数getElementsByTagName(ele[0]);		//第一个Li标签的内容//如果没有此标签,返回一个空数组	//当需要区分不同父元素中的相同标签时	var ol = document.getElementsByTagName('ul');    console.log(ol[0].getElementsByTagName('li');	//先找到父元素,再用父元素.d

③通过HTML5新增方法获取类选择器

element.getlementsByClassName('类名');		//根据类名寻找标签,返回对象集合

④特殊元素获取,返回特定选择器的第一个元素

document.querySelector('.类名')/('#id名')		//选择出第一个指定标签
document.querySelectorAll('.类/#ID');		//选择特定选择器的所有元素,返回元素集合

⑤获取body标签

document.body;			//返回body标签中的所有元素

⑥获取HTML中的所有元素

var ele = document.documentElement;		//应该是一个成员对象,可以返回html中的所有元素

2、事件基础

①组成部分:事件源、事件类型、事件处理程序

事件源:事件被触发的对象事件类型:如何触发?什么事件?	如:鼠标点击(onclick)、鼠标经过、键盘按下事件处理程序:通过函数赋值的方式完成	 

例子:

<button id='btn'>点我!点我</button>    <script>        var btn = document.getElementById('btn');        btn.onclick = function(){            alert('没毛病!');        }    </script>

3、操作元素

①改变元素内容

element.innerText;		//只有元素中的文本属性,需要用=来赋值修改,但是赋值的字符串不能包含html的标签    //例子    div.innerText = '2021-08-09';
element.innerHTML;		//可以包含html的标签语法,是所有的内容    //例子    div.innerText = '<strong>2021</strong>-08-09';

②表单元素的可操作元素

利用DOM可以操作如下表单元素的属性

type、value(内容、值)、checked(选项是否被选中)、selected(可选属性)、disabled(禁用表单元素)

▲this指向事件函数的调用者,所以可以用this来代替元素

③样式属性操作

element.style		//行内样式操作element.className		//类名样式操作

style使用,如:

var div = document.querySelector('div');div.onclick = function(){	this.style.backgroundColor = 'purple';}			//修改了DIV的背景颜色

案例:循环精灵图

var lis = document . querySelectorAll('li' );for (var i = 0; i < lis.length; i++) //让索引号乘以44就是每个li的背景y坐标 index就是我们的y坐标varindex=i*44;lis[i]. style. backgroundPosition = 'O -' + index + 'px' ;

案例:表单文本框默认文字焦点问题(之前的placeholder也可实现)

对象.onfocus;		//得到焦点对象.onblur;		//失去焦点		

className的使用,如:

当你要对一个元素修改一个类的css属性时,用className属性whis.className = '新类名';

如果想保留原先的类名:

要赋值时写成:"旧类名 新类名";

4、鼠标指令

onmouseover		//鼠标经过onmouseout		//鼠标离开onmousedown 按下 onmouseup抬起oncontextmenu右键 onmusemove 移动onmouseover/onmouseenter移入 onmouseout/onmouseleave 移出(建议使用mouseenter 、mouseleave,因为mouseover和mouseout在鼠标进入元素子级会触发)

5、键盘指令

6、排他思想

描述:如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环

1、所有元素清除样式

2、给当前元素变化样式

7、获得元素属性

语法:

ele.getAttribute('id/class/...属性');			//获得元素属性
▲重要:自定义属性
<div index = '自定义数值'>		//再用getAttribute来获得其中的自定义数值</div>

8、移除元素属性

ele.remove.Attribute('id/class/...属性');

9、更改元素属性

ele.setAttribute('属性',要改为的值);			//修改元素属性的值,是数值就不要引号,是字符串就要加

10、HTML5的自定义属性规范

<div data-index='1'>    //自定义属性一般在前面加data-,来设定一个规范</div>

获取自定义属性方法:

element.dataset.index(自定义属性)

二、节点操作:

描述:一般,节点至少拥有nodeType(节点类型)、nodeName(节点名称)、nodeValue(节点值)三个基本属性

nodeType:值1:元素节点2:属性节点3:文本节点

1、节点类别:

类名(元素名).parentNode;		//会获得其元素的父亲节点类名(元素名).childNodes;		//获得其所有类型的孩子节点,呈一个数组形式返回类名(元素名).children;		//获得元素所有的元素节点	▲重点、常用类名(元素名).firstElementChild;		//获得第一个子元素节点类名(元素名).lastElementChild;		//获得最后一个子元素节点类名(元素名).firstChild;		//获得第一个子节点类名(元素名).lastChild;		///获得最后一个子节点类名(元素名).nextSibling;	//获得下一个兄弟节点(不只是元素节点)类名(元素名).previousSibling;	//获得上一个兄弟节点(不只是元素节点)类名(元素名).nextElementSibling;	//获得下一个元素兄弟节点类名(元素名).previousElementSibling;	//获得上一个元素兄弟节点

2、创建节点和添加节点

var li = document.createElement('li');var ul = document.querySelector('ul');ul.appendChild(li);

3、删除节点

父节点.removeChild('某个子节点');			//返回被删除的节点

阻止链接跳转:href = ‘javascript:;’ 即可

4、克隆节点

node.cloneNode();			//返回已复制的节点,参数为空即只赋值元素,如果参数为true也f值

三、事件高级

1、注册事件概述

给元素添加事件,成为注册事件或绑定事件

注册事件有两种方式,:传统方式 和 方法监听注册方式

①传统方式

特性:注册事件有唯一性,同一个元素的同一个事件只能设置一个处理函数,最后的注册处理函数会覆盖前面的处理函数

②方法监听注册方式

特性:可以实现同一元素有多个同样处理函数,执行顺序从上到下

语法:

eventTarget.addEventListener(type,listener[,useCapture])						//或者是(type,function(){函数体}),或者是函数名type:事件类型字符串,如click、mouseover(不带on)listener:事件处理函数,事件发生时,会调用该监听函数useCapture:可选参数,是一个布尔值,默认为false

2、删除事件

①传统方式

ele.onclick = null; //实现删除事件

eventTarget.removeEventListener(type,函数名)
var div.addEventListener('click',fn);function fn(){	alert(666);	this.removeEventListener('click',fn)}

3、捕获阶段、冒泡阶段

当addEventListener(‘click’,fn)有第三个参数时,true代表捕获,false代表冒泡

捕获从外到里,冒泡从里到外

4、事件对象

event就是一个事件对象,写在监听函数的小括号里,当形参来看,

但它本身是自己写好的,会储存当前事件的对象,比如有鼠标、键盘、点击的对象信息

如:div.onclick = function(event){	console.log('event');}

5、对象属性

e.target		//返回触发事件的元素对象e.currentTarget		//返回绑定事件e.type		//返回事件的类型e.preventDefault()			//阻止默认事件,比如阻止点击链接被打开(或者用return false阻止默认事件)e.stopPropagation();		//停止传播冒泡,停止冒泡e.clientX			//返回鼠标当前x坐标	(相对浏览器)e.clientY			//返回鼠标当前y坐标	(相对浏览器)e.pageX			//返回鼠标当前x坐标	(相对整个文档页面)e.pageY			//返回鼠标当前y坐标	(相对整个文档页面)e.screenX			//返回鼠标当前x坐标	(相对电脑屏幕)e.screenY			//同上

兼容性停止冒泡解决方案:
if(e&&e.stopPropagation){
e.stopPropagation();
}
else{
window.e.cancelBubble = true;
}

96、事件委托

原理:给父节点添加监听器(事件函数),利用事件冒泡原理影响每一个子节点

7、常用鼠标事件

div.contextmenu = function(){	//阻止鼠标再document中使用右键	e.preventDefault();			//阻止事件}
div.selectstart = function(){	//阻止鼠标再document中选中文字	e.preventDefault();			//阻止事件}
ele.mousemove		//s

8、常用键盘事件

onkeyup		//键盘弹起,触发的优先级高,多用于配合文本框使用onkeydown	//键盘弹起,字母不分大小写,触发的优先级低onkeypress  //键盘弹起(不识别特殊功能按键,如:control、alt),触发的优先级d

9、事件对象

e.keyCode;		//按下的按键的ASCII值,推荐用keypress

二、BOM

定义:BOM(brower object model),浏览器对象模型,提供独立于内容而与浏览器窗口进行交互的对象,其核心是windows(最顶级对象)

1、页面加载事件

load

作用:把页面所有元素加载完毕后再执行里面的功能

window.onload = function(){				******;}window.addEventListener('load',function(){ } )
DOMContentLoaded

作用:是DOM加载完毕后即可执行功能

2、调整窗口大小事件

resize / onresize

window.onresize = function(){

3、定时器

window对象提供了两个非常好用的方法——定时器

当延迟时间经过,执行函数

window.setTimeout(调用函数,延迟的毫秒数);		//无参时使用window.setTimeout('调用函数(参数)',延迟的毫秒数);		//带参时使用

▲停止定时器

window.clearTimeout(定时器变量名称);

以上两种方法,window皆可省略

重复调用定时器

setInterval(); 重复调用一个函数,每过这段时间就会调用一次

window.setInterval(回调函数,[米毫秒数]);window.setInterval('调用函数(参数)',延迟的毫秒数);		//带参时使用

4、location对象

location是浏览器的一个对象

常用属性:href(地址)、search(提交的数据 )

常用方法:

location.assign('地址')		//	跳转页面location.replace('地址')		//	跳转页面(无法后退页面)location.reload()			//重新加载页面(刷新)

5、navigation对象

6、history对象

7、PC端网页特效

①offset元素偏移量系列

定义:offset相关属性可以动态得到元素的偏移位置、大小等

●获得元素距离带有定位父元素的位置

●获得元素自身大小(高度、宽度)

●返回的数值不带单位

ele.offsetParent();			//获得元素距离带有定位父元素,如果父级没有定位泽返回body
ele.offsetTop();			//返回元素相对父级元素上边缘的偏移量
ele.offsetLeft();			//返回元素相对父级元素左边缘的偏移量
ele.offsetWidth();			//返回自身包括padding、边框、内容区的宽度,返回不带单位
ele.offsetHeight();			//返回自身包括padding、边框、内容区的高度,返回不带单位
②client元素可视区系列
和offset类似
③scroll元素滚动系列
ele.scrollTop();			//返回元素内容滚动的上偏移量
ele.scrollLeft();			//返回元素内容滚动的左偏移量
ele.scrollWidth();			//返回自身包括padding、内容区的宽度,返回不带单位
ele.scrollHeight();			//返回自身包括padding、内容区的高度,返回不带单位
如果对象是整个页面要用:
window.pageX/YOffset()

特殊事件:

addEventLister('scroll',function()31'
仂.
){});
④动画函数封装

核心原理:通过定时器setInterval()不断移动盒子位置

实现步骤:

1、获得当前盒子位置

2、让盒子移动一个距离

3、定时器重复移动1像素

4、结束定时器条件

5、添加定位,因为要使用ele.style.top/left


把以上步骤写成函数,形参是元素对象和其他参数等(距离,位置,时间)

定时器的变量名为 object.timer = setInterval(func(){},1000);

当多次激活定时器时记得每次都要清除定时器

▲这样可以使不同的元素获得(新增)其自身的成员方法:定时器

⑤常见网页特效案例
⑥立即执行函数(匿名函数)
(function(形参列表){})(实参列表)		//直接执行函数
⑦两种鼠标移动事件的区别

mouseover:会冒泡,经过自身或者子盒父、子都会触发

mouseenter:不会冒泡,只有经过本身元素才会触发

⑧缓动效果原理

思路:让盒子每次移动的距离慢慢变小,速度就会慢慢落下来

更多推荐

JavaScript自制笔记

本文发布于:2024-03-08 11:16:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔记   JavaScript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!