Javascript

219 阅读7分钟

javascript

声明函数:

  1. function 函数名(){}
  2. var 函数名=function(){}

伪数组

arguments

预解析

1. js运行引擎js分两步:预解析 代码执行

(1)预解析:js引擎会把js里面的所有的var还有function提升到当前作用域的最前面 (2)代码执行:按照书写顺序从上往下依次执行

2. 预解析分为:变量预解析(变量提升)和函数解析(函数提升)

(1)变量提升就是把所有变量声明提升到当前作用域的最前面,不提升赋值操作 (2)函数提升就是把所有函数声明提升到当前作用于的最前面,但是不调用

创建数组

1.var arr=[] 2.var arr=new Array[]

创建对象

1、利用new Object();

var pink=new Object(); pink.name= pink.age= pink.sayhi=function(){}

2、利用构造函数创建对象

function Person(name,age,sex){ this.name=name; this.age=age; this.sex=sex; this.sayHi=function(){} }

3、利用字面量创建对象

var star={ name:'pink', age='18', sex='男', sayHi:function(){} }

遍历对象

for(变量 in 对象名){} for (var k in obj){}//k指属性名,obj[k]是属性值

事件基础

事件三要素

事件源 事件类型 事件处理程序 如果想要某个表单被禁用 不能再点击 disabled 我们想要这个按钮 button禁用 btn.disable=true活着this.disable=true(this指向事件函数的调用者btn 通过className更改元素类名:this.className = 'change';

自定义属性操作

1、获取元素的属性值 (1)、element.属性 (2)、element.getAttribute('属性') 2、设置元素属性值 (1)、element.属性='值' 注意类名要用className (2)、element.setAttribute('属性','值') 注意类名要用class不要用className 3、移出属性 element.removeAttrbute('属性') 注意:带有Attribute主要是自定义属性,自定义属性一般带有data-index,如data-index

节点操作

一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。 元素节点 nodeType为1 属性节点 nodeType为2 文本节点 nodeType为3(文本节点包括文字、空格、换行等)

父节点:node.parentNode 注意:parentNode属性返回某节点的父节点,是最近一个父节点。

子节点:node.childNode 注意:childNode属性返回第一个子节点。parentNode.lastChild返回最后一个子节点。 parentNode.children(是一个只读属性,返回所有子元素节点。他只返回子元素节点,其余节点不返回) parentNode.fristElementChild返回第一个子元素节点 兄弟节点:node.nextSibling node.previousSibling(兄弟元素节点) node.nextElementSibling node.previousElementSibling(兄弟元素节点)

创建节点

document.createElement('tagname')

添加节点

node.appendChild(child) 将一个节点添加到指定父节点的子节点列表末尾。类似于长CSS里面的after伪元素。 node.insertBefore(child,指定元素) 将一个节点添加到指定父节点的指定子节点列表前面。类似于长CSS里面的before伪元素。

DOM核心:创建、增、删、改、查属性操作和事件操作。

注册事件(绑定事件)

传统注册方式

(1)利用on开头的事件onclick (2)或者btn.onclick=function(){} (3)特点:注册事件的唯一性 (4)同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数。

方法监听注册方式

(1)w3c标准推荐方式 (2)addEventListener()他是一个方法,IE9之前可使用attachEvent()代替 (3)特点:同一个元素同一个事件可以注册多个监听器 (4)按顺序依次执行 (i)监听方式eventTarget.addEventListener(type,lister[,useCapture]) type:事件类型字符串,比如 click 、mouseover ,注意这里不要带 on listener:事件处理函数,事件发生时,会调用该监听函数 useCapture:可选参数,是一个布尔值,默认是 false。学完 DOM 事件流后,我们再进一步学习 (ii)eventTarget.attachEvent(eventNameWithOn, callback) eventTarget.attachEvent()方法将指定的监听器注册到 eventTarget(目标对象) 上,当该对象触发指定的事件时,指定的回调函数就会被执行。 该方法接收两个参数: eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on callback: 事件处理函数,当目标触发事件时回调函数被调用.注意:IE8 及早期版本支持

删除事件方式(解绑事件)

传统注册

eventTarget.onclick = null;

方法监听

eventTarget.removeEventListener(type, listener[, useCapture]); eventTarget.detachEvent(eventNameWithOn, callback);

DOM事件流

image.png

e.target和this的区别:

this是事件绑定的元素,这歌汉书的调用者(绑定这个事件的元素) e.target是事件触发的元素

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

image.png

阻止事件冒泡

标准写法 e.stopPropagation() 非标准写法 e.cancelBubble=true;

事件委托

事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点

var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) {
            // alert('知否知否,点我应有弹框在手!');
            // e.target 这个可以得到我们点击的对象
            e.target.style.backgroundColor = 'pink';

鼠标事件对象

image.png

常用键盘事件

image.png

监盘事件对象

image.png

BOM

image.png

窗口加载事件

一、window.onload=function(){} 或者window.addEventLister("load",function(){}) window.onload 是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。

  1. 有了 window.onload 就可以把 JS 代码写到页面元素的上方,因为 onload 是等页面内容全部加载完毕,再去执行处理函数。
  2. window.onload 传统注册事件方式 只能写一次,如果有多个,会以最后一个 window.onload 为准。
  3. 如果使用 addEventListener 则没有限制

二、document.addEventListener('DOMContentLoaded',function(){}) DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。 Ie9以上才支持 如果页面的图片很多的话, 从用户访问到onload触发可能需要较长的时间, 交互效果就不能实现,必然影响用户的体验,此时用 DOMContentLoaded 事件比较合适。

调整窗口大小事件

window.onresize = function(){} 或者window.addEventListener("resize",function(){}); window.onresize 是调整窗口大小加载事件, 当触发时就调用的处理函数。 注意:

  1. 只要窗口大小发生像素变化,就会触发这个事件。
  2. 我们经常利用这个事件完成响应式布局。 window.innerWidth 当前屏幕的宽度

定时器

window 对象给我们提供了 2 个非常好用的方法-定时器。 setTimeout() setInterval()
window.setTimeout(调用函数, [延迟的毫秒数]); setTimeout() 方法用于设置一个定时器,该定时器在定时器到期后执行调用函数。 注意:

  1. window 可以省略。
  2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串‘函数名()'三种形式。第三种不推荐
  3. 延迟的毫秒数省略默认是 0,如果写,必须是毫秒。
  4. 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。

停止定时器

window.clearTimeout(timeoutID) clearTimeout()方法取消了先前通过调用 setTimeout() 建立的定时器。 注意:

  1. window 可以省略。
  2. 里面的参数就是定时器的标识符 。

setInterval()定时器

window.setInterval(回调函数, [间隔的毫秒数]); setInterval() 方法重复调用一个函数,每隔这个时间,就去调用一次回调函数。 注意:

  1. window 可以省略。

  2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串 '函数名()' 三种形式。

  3. 间隔的毫秒数省略默认是 0,如果写,必须是毫秒,表示每隔多少毫秒就自动调用这个函数。 4.因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。

  4. 第一次执行也是间隔毫秒数之后执行,之后每隔毫秒数就执行一次。 常用于倒计时

JS执行机制

split()把字符串分成数组

location对象

image.png

location对象方法

image.png

navigator对象

image.png

history对象

image.png

offset概述

image.png

offset和style区别

image.png

元素可视区client系列

image.png

元素滚动scrool系列

image.png