JavaScript入门

基础语法

申明变量

var绝对不用,const优先,再是let

建议数组和对象使用const,因为他们存储的都是地址,只要地址不变,就不会报错

获取DOM对象

document.querySelector('css选择器')    //选择一个
document.querySelectorAll('css选择器') //选择多个,返回一个伪数组

操作元素内容

对象.innerText = "***"  //显示纯文本,不解析标签
对象.innerHtml = "***"  //能识别文本,能解析标签

操作元素属性

// 操作元素常用属性
对象.属性 =// 操作元素样式属性
对象.style.样式属性 = 值
对象.className = 'active'     //直接替换
对象.classList.add('类名')    //追加一个类
对象.classList.remove('类名') //删除一个类
对象.classList.toggle('类名') //切换一个类,有就删,没就加

自定义属性

**格式:**data-自定义属性

**获取:**对象.dataset.自定义属性

定时器-间歇函数

开启定时器
setInterval(函数, 间隔时间)
关闭定时器
let 变量名 = setInterval(函数,间隔时间)
clearInterval(变量名)

DOM事件基础

事件监听

方法一:

对象.on事件 = function(){}

方法二(推荐使用,on方法会被覆盖,addEventListener方法可绑定多次):

对象.addEventListener(‘事件类型’, 要执行的函数)

事件类型

鼠标事件

click 鼠标点击

mouseenter 鼠标经过

mouseleave 鼠标离开

焦点事件

focus 获得焦点

blur 失去焦点

键盘事件

keydown 键盘按下触发

keyup 键盘抬起触发

文本事件

input 用户输入事件

事件对象

元素.addEventListener('click', function(e){})
// e便是事件对象,一般命名为event, ev, e,为这个对象里有事件触发时的相关信息

console.log(e.type)
// 获取当前事件类型

console.log(e.clientX/clientY)
// 获取光标相对于浏览器可见窗口左上角的位置

console.log(e.offserX/offsetY)
// 获取光标相对于当前DOM元素左上角的位置

console.log(e.key)
// 获取用户按下的键盘值,现在不提倡使用keyCode

环境对象

环境对象this是当前函数运行时所处的环境

谁调用,this就是谁

回调函数

把函数作为另外函数的参数传递,这个函数就是回调函数,一般匿名函数比较多

DOM事件进阶

事件流

  1. 捕获阶段
    • Document -> Element html -> Element body -> Element div
  2. 冒泡阶段
    • Element div -> Element body -> Element html -> Document

简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父

事件捕获
对象.addEventListener(事件类型, 事件处理函数, 是否使用捕获机制)
// 第三个参数默认false代表冒泡阶段触发,true代表捕获阶段触发
对象.on事件
// 只有冒泡阶段,没有捕获
事件冒泡

当一个元素触发事件后,会依次向上调用所有父级元素的 同名事件

阻止事件流动

对象.stopPropagation()

解绑事件

对象.on事件 = null

对象.removeEventListener(事件类型, 事件处理函数)

鼠标经过事件的区别

mouseover和mouseout会有冒泡效果

mouseenter和mouseleave不会有冒泡效果(推荐)

事件委托

原理:使用事件冒泡的特点

做法:给父元素注册事件,当我们触发子元素的时候,会冒泡到父元素身上,从而触发父元素的事件

const ul = document.querySelector('ul')
ul.addEventListener('click',function(e){
    if (e.target.tagName === 'LI'){     // 通过对象.target.tagName找到真正触发的元素
        this.style.color = 'red'
    }
})

其他事件

页面加载事件
  1. load
  2. DOMContentLoaded HTML文档加载解析完成后,无需等待样式表、图像加载完毕,就能触发
页面滚动事件

**事件名:**scroll

对象.scrollLeft/scrollTop  //对象被卷去的大小

document.documentElement.scrollTop/scrollLeft //页面滚动的大小

对象.scrollTo()  //滚动到指定坐标

元素尺寸与位置

**事件名:**resize

clientWidth和clientHeight 
// 获取元素的可见部分宽高(不包含边框,margin,滚动条等)

offsetWidth和offsetHeight 
// 获取元素的自身宽高、包含元素自身设置的宽高、padding、border

offsetLeft和offsetTop
// 获取元素距离自己定位父级元素的左、上距离
// 找到有定位的父级元素
// offsetLeft和offsetTop 注意是只读属性

getBoundingClientRect()
// 不受父级元素定位的影响

日期对象

实例化
// 获取当前时间
const date = new Date() 
// 获取指定时间
const date = new Date('2008-8-8')
日期对象方法

在这里插入图片描述

date.toLocaleString()     // yyyy/mm/dd hh:mm:ss
date.toLocaleDateString() // yyyy/mm/dd
date.toLocaleTimeString() // hh:mm:ss
时间戳

使用场景:如果计算倒计时效果,前面方法无法直接计算,需要借助时间戳完成。

什么是时间戳:是指1970年01月01日00时00分00秒起至现在的毫秒数,它是一种特殊的计量时间的方式。

// 三种方式获取时间戳
// 1.使用 getTime()方法
const date = new Date()
cosole.log(date.getTime())

// 2.简写 +new Date()
console.log(+new Date())

// 3.使用 Date.now()
console.log(Date.now())

注意:

  • 第三种方法无需实例化
  • 但是只能得到当前的时间戳,而前面两种可以得到指定时间的时间戳

DOM节点

DOM节点的分类

元素节点 比如DIV标签(重点)

属性节点 比如class属性

文本节点 比如标签里面的文字

查找节点

父节点查找:

子元素.parentNode

  • 找不到返回null
子节点查找:

childNodes

  • 获得所有子节点、包括文本节点(空格、换行)、注释节点等

父元素.children(重点)

  • 仅获得所有元素的节点
  • 返回一个伪数组
兄弟节点查找

下一个兄弟节点

  • nextElementSibling

上一个兄弟节点

  • previouslementSibling

增加节点

创建节点
  • document.createElement(‘标签名’)
追加节点
  • 插入到父元素的最后一个子元素

    父元素.appendChild(要插入的元素)

  • 插入到父元素中某个子元素的前面

    父元素.insertBefore(要插入的元素, 在哪个元素前面)

克隆节点

元素.cloneNode(布尔值)

若为true,则代表克隆时回包含后代节点一起克隆(深克隆)

若为false,则代表克隆时不包含后代节点(浅克隆)

删除节点

父元素.removeChild(要删除的元素)

  • 如不存在父子关系则删除不成功

移动端事件

touchstart

  • 手指触摸到一个DOM元素时触发

touchmove

  • 手指在一个DOM元素上滑动时触发

touchend

  • 手指在一个DOM元素上移开时触发

Window对象

BOM(浏览器对象模型)

在这里插入图片描述

像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的。

所有通过var定义在全局作用域中的变量、函数都会变成window对象的属性和方法

window对象下的属性和方法调用的时候可以省略window

定时器-延时函数

// 设置延时函数
setTimeout(回调函数, 等待的毫秒数)

//清除延时函数
let timer = setTimeout(回调函数, 等待的毫秒数)
clearTimeout(timer)

JS执行机制

先执行执行栈中的同步任务

异步任务放入任务队列中

执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,放入执行栈中,开始执行。

在这里插入图片描述

location对象

href 属性获取完整的 URL 地址,对其赋值时用于地址的跳转

search 属性获取地址中携带的参数,符号 ?后面部分

hash 属性获取地址中的啥希值,符号 # 后面部分

reload 方法用来刷新当前页面,传入参数 true 时表示强制刷新(CTRL+F5)

navigator对象

// 检测 userAgent(浏览器信息(Android、iPhone、chrome))
!(function () {
  const userAgent = navigator.userAgent
  // 验证是否为Android或iPhone
  const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
  const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
  // 如果是Android或iPhone,则跳转至移动站点
  if (android || iphone) {
    location.href = 'http://m.itcast.cn'
  }
})();

// 下面这两句代码的含义一样
!function(){}()   ===    (function(){})()

histroy对象

history的数据类型时对象,主要管理历史记录,该对象与浏览器地址栏的操作相对应,入前进、后退、历史记录等

方法:

  1. back() 后退功能
  2. forward() 前进功能
  3. go(参数) 前进后退功能,参数如果是1前进1个页面,如果是-1后退1个页面

本地存储

介绍

  1. 数据存储再用户浏览器中
  2. 设置、读取方便、甚至页面刷星不丢失数据
  3. 容量较大,sessionStorage和localStorage约5M左右

分类

sessionStorage(了解)

特性:

  • 生命周期为关闭浏览器窗口
  • 在同一窗口(页面)下数据可以共享
  • 一键值对的形式存储使用
localStorage

**作用:**可以将数据永久存储再本地(用户的电脑),除非手动删除,否则关闭页面也会存在

**特性:**可以多窗口(页面)共享(同一浏览器可以共享)、以键值对的形式存储使用

//存储数据
localStorage.setItem(key,value)

//获取数据
localStorage.getItem(key)

//删除本地存储
localStorage.removeItem(key)

存储复杂数据类型

// 语法:JSON.stringify
const data = {
    name: 'aaa',
    price: 1999
}
localStorage.setItem('data',JSON.stringify(data))
// 语法:JSON.parse(JSON字符串)
const obj = JSON.parse(localStorage.getItem('data'))
console.log(obj)

正则表达式

参考文档
  • MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
  • 正则测试工具: http://tool.oschina.net/regex
作用
  • 表单验证(匹配)
  • 过滤敏感词(替换)
  • 字符串中提取我们想要的部分(提取)
语法
定义正则表达式语法:
const 变量名 = /表达式/
判断是否有符合规则的字符串:
regObj.test(被检测的字符串)
//返回true or false
检索(查找)符合规则的字符串:
regObj.exec(被检测字符串)
//匹配成功返回一个数组,否则返回null
元字符
  1. 边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)
    • ^ 表示匹配行首的文本(以谁开始)
    • $ 表示匹配行尾的文本(以谁结束)
    • ^& 表示精确匹配
  2. 量词(表示重复次数)
    • ***** 重复零次或更多次
    • + 重复一次或更多次
    • ? 重复零次或一次
    • {n} 重复n次
    • {n,} 重复n次或更多次
    • {n,m} 重复 n到m次
  3. 字符词
    • [] 匹配字符集合

    • [] 里面加上 - 连字符,表示一个范围

    • [] 里面加上 ^ 取反符号

    • [] 里面加上 . ,匹配除换行符之外的任何单个字符

    • 预定义类

      \d 匹配0-9之间的任一数字,相当于[0-9]

      \D 匹配所有0-9之外的字符,相当于 [ ^ 0-9]

      \w 匹配任一的字母、数字和下划线,相当于[a-zA-Z0-9_]

      \W 匹配除字母、数字和下划线以外的字符,相当于[ ^a-zA-Z0-9_]

      \s 匹配特殊字符(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f]

      \S 匹配非特殊字符的字符,相当于[ ^\t\r\n\v\f]

  4. 修饰符

    语法:/表达式/修饰符

    i是单词ignore的缩写,正则匹配时字母不区分大小写

    g是单词global的缩写,匹配所有满足正则表达式的结果(不加只会匹配一个)

    字符串replace(/正则表达式/, '替换的文本')
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值