博客列表 >JS基础要点

JS基础要点

kong
kong原创
2023年10月20日 09:15:21496浏览

css

Grid布局 二维布局:可在水平垂直两个方向上同时布局

1.栅格布局

1.1. 容器

  1. display: grid/inline-grid: 容器类型(块状或者行内)
    1.1: 属性
    grid: 块状
    grid-inline-grid: 行内

  2. grid-template-row/columns: 创建显式网格(列/行)
    2.1: 属性
    repeat:重复
    grid-template-columns: repeat(1fr 1fr)
    grid-template-row: repeat(1fr 1fr)

  3. grid-auto-row/columns: 创建隐式网格
  4. grid-auto-flow: 项目排列方向
  5. gap: 行列间隙
  6. place-content: 项目在容器中的排列方式
  7. place-items: 项目在单元格中的排列方式

2.项目

  1. grid-row/colums: 某项占据的网格区域
  2. grid-area: 是grid-row/column的语法糖
  3. place-self: 某项在单元格中的排列方式

更多:https://developer.mozilla.org/zh-CN/docs/web/CSS/CSS_Grid_Layout

2.媒体查询 @media (min-width: 大于) (max-width: 小于) (min-width: 小于) and (max-width: 大于)

2.移动端rem vw

公式: font-size: calc(100vw / 3.75); //100px;

javascript

1. 代码成员

  1. 数据:
    变量 let,储存数据和表示数据的标识符,可以在程序中被改变
    常量 const,一旦赋值就不能被改变了。

  2. 命名规则
    驼峰命名(大,小) UserName (大) userName(小)
    蛇形命名(大,小)user_name(小) APP_PHP(大)

2. 函数

1. 函数

  1. function(){
  2. //...
  3. }

2. 匿名函数

  1. let item = function(){
  2. ...
  3. }

3. 箭头函数

  1. (参数),没有参数可以留空
  2. let item = () => {
  3. //...
  4. }

4. 立即执行函数

  1. ;(function(){
  2. //..
  3. })();
  4. //或者
  5. ;(()=>{
  6. //语法糖
  7. })();

3. 引用类型

基本类型: number string boolean null undefined

引用类型:object array function

1. 数组

  1. let arr = ['1','2','3','4']
  2. console.log(arr)

2. 对象

  1. let arr = {
  2. 'name':'小明',
  3. 'age':'15'
  4. }
  5. console.log(arr)

3. 多维数组,对象数组,“类”数组

  1. //多维数组
  2. let arr = [['1',2,'你好'],['1',2,'小明']]
  3. console.log(arr[0][1] //2);
  4. //对象数组
  5. let arr = [
  6. {
  7. 'name':'小明',
  8. 'age': '15',
  9. 'sex':'男'
  10. },
  11. {
  12. 'name':'小明红',
  13. 'age': '15',
  14. 'sex':'女'
  15. }]
  16. console.log(arr[0].name //小明);
  17. //“类”数组
  18. let item = {
  19. 'name':'小明红',
  20. 'age': '15',
  21. 'sex':'女'
  22. }
  23. //对象使用 Array.from() 转换成数组
  24. arr = Array.form(item)
  25. consloe.log(arr)//数组
  26. //对象使用forEach()遍历输出数据
  27. arr.forEach(item => console.log(item))
  28. consloe.log(arr)//对象

4. 作用域

1. 作用域(用来查询变量)

2. 作用域链(由内向外查找)

3. 类型:块作用域,函数作用域,全局作用域

  1. //块作用域
  2. {
  3. let name = '小明';
  4. console.log(name)
  5. }
  6. //函数作用域
  7. let site = '墨子';
  8. const arr = function(){
  9. site = '鲁班大师'
  10. console.log(site) //'鲁班大师'
  11. }
  12. console.log(arr) //'鲁班大师'
  13. //全局作用域
  14. let site = '墨子'; // 在全局中生成变量

5.对象成员的简化语法

  1. //键值和属性一样可以简写
  2. let name = '墨子';
  3. let age = 18;
  4. const obj = {
  5. name,
  6. age
  7. }
  8. conosle.log(obj)

6.流程控制语句

1.分支

  1. if(true){
  2. //...
  3. console.log('hello')
  4. }

2.双分支

  1. if(true){
  2. console.log('hello')
  3. }else{
  4. console.log('你好')
  5. }

3.多分支

  1. let name = '墨子';
  2. if(name = '墨子'){
  3. console.log('hello')
  4. }else if(name = '鲁班大师'){
  5. console.log('你好')
  6. }else{
  7. console.log('嘿嘿')
  8. }

4.双分支语法糖(简化抒写)

三元运算符

//条件?true : false
let name = true;
console.log(name ? ‘墨子’: ‘鲁班大师’)

5.多分支语法糖(简化抒写)

等值判断

  1. let name = '墨子';
  2. switch(name){
  3. case '鲁班大师':
  4. console.log('1');
  5. break;
  6. case '墨子':
  7. console.log('2');
  8. break;
  9. default:
  10. console.log('甄姬')
  11. }

范围判断

传入true才可以执行
switch(true)

  1. let name = 80;
  2. switch(true){
  3. case name>70 && name < 100:
  4. console.log('80');
  5. break;
  6. case name>60 && name < 80:
  7. console.log('70');
  8. break;
  9. default:
  10. console.log('60')
  11. }

6.循环

while

  1. consot arr = [1,2,3];
  2. let index = 0;
  3. while(index < arr.length){
  4. console.log(arr[index])
  5. }

for

  1. consot arr = [1,2,3];
  2. for(let index = 0; index < arr.length; i++){
  3. console.log(arr[i])
  4. }

for-of (数组循环)

  1. consot arr = [1,2,3];
  2. for(value of arr){
  3. console.log(value) //1,2,3
  4. }

for-in (对象循环)

  1. consot arr = {name: '小马', age:'18', sex: '男'};
  2. for(index in arr){
  3. console.log(arr[index]) //小马,18,男
  4. }

forEach/map

forEach() 没有返回值

  1. const arr = ['小马', 18,'男'];
  2. arr.forEach(function(item,index,arr){
  3. console.log(item)
  4. });
  5. //简化
  6. arr.forEach(item => console.log(item))

map() 有返回值

  1. const arr = ['小马', 18,'男'];
  2. const res = arr.map(item => console.log(item));
  3. const res = arr.map((item,index,arr) =>
  4. `<span> ${index}: ${item} </span>\n`
  5. ).join('');
  6. const bos = document.querySelector('body');
  7. bos.innerHTML+=res
  8. console.log(res);

函数参数与返回值

参数

参数不足:默认参数

  1. //参数不足的时候
  2. let fn = function(a,b = 0){
  3. return a+b
  4. }
  5. console.log(fn(1))

参数过多:剩余参数

  1. fn = (a,b,...arr){
  2. //展开函数
  3. //第一种
  4. //创建一个数组
  5. let tmp = [a,b,...arr];
  6. let res = 0; //初始值
  7. tmp.forEach(item =>{
  8. res += item
  9. return res;
  10. })
  11. }
  12. //第一个函数参数输出
  13. fn(1,2,3,4) //10
  14. fn = (a,b,...arr){
  15. //展开函数
  16. //第二种
  17. //解析解构:将集合中的每一个成员,赋值给一个个独立的变量
  18. let [c,d,e] = arr;
  19. let data = [a,b,c,d,e];
  20. //数组的reduce方法进行求和
  21. return = data.reduce((prev,curr) => prev+curr,0)
  22. }
  23. //第一个函数参数输出
  24. fn(1,2,3,4) //10

返回值

单值:return

多值: 数组,对象

  1. //查询一个数组对象数据
  2. const items = [
  3. {id: 1,name: '西瓜', price: 20},
  4. {id: 2,name: '苹果', price: 30},
  5. {id: 3,name: '橘子', price: 40},
  6. {id: 4,name: '香蕉', price: 50},
  7. ];
  8. const getFruits = ((item, ...num) => {
  9. //先建一个返回数组
  10. let res = [];
  11. //循环num的个数
  12. for(let i = 0; i < num.length; i++){
  13. //循环出items的数据
  14. items.forEach(item => {
  15. //判断id和num的值是否相同,相同的话追加在res数组中
  16. if(item.id === num[i]){
  17. res.push(item)
  18. }
  19. })
  20. }
  21. return res
  22. })
  23. let result = getFruits(items,3,4) //{id: 3,name: '橘子', price: 40},{id: 4,name: '香蕉', price: 50}

模板字面量

多行字符串

  1. const arr = ['小明','男','18']
  2. let res = `
  3. <ul>
  4. <li>姓名:${arr[0]}</li>
  5. <li>性别:${arr[1]}</li>
  6. <li>年龄:${arr[2]}</li>
  7. </ul>
  8. `
  9. console.log(res)

解析字符串模板中的变量或表达式

解构赋值

数组解构

  1. let arr = [100,200];
  2. //左侧为模板 数组用[...] 对象用{...}
  3. //右侧为值
  4. //创建
  5. let [a,b] = arr;
  6. //更新值
  7. ;[a,b] = [300,500];
  8. console.log(a,b) //更新值 300,500
  9. //如果变量>值:使用默认值
  10. ;[a,b,c = 600] = [300,500];
  11. console.log(a,b,c) //300,500,600
  12. //变量<值:使用剩余参数 ...res
  13. ;[a,b,...arr] = [300,500,400,500];
  14. let [c,d] = arr;
  15. console.log(a,b,...arr) //300,500,400,500

对象解构

  1. //属性名有冲突的时候可以使用 uname(旧值): name(新值)
  2. let {uname: name,age} = {uname: '小明',age: 18, sex: '男'};
  3. console.log(uname,age)

应用场景1.对象克隆

  1. let user = {uname: '小明',age: 18, sex: '男'};
  2. let {...obj} = user;
  3. //克隆以后和之前的对象并不相等
  4. console.log(obj)

应用场景2. 简化传参

  1. let user = {uname: '小明',age: 18, sex: '男'};
  2. //原始传参
  3. let show = (user => {
  4. return `名字:${user.uname},年龄:${user.age}`
  5. })
  6. console.log(show(user)) // 名字:小明,年龄:18
  7. //简化对象传参
  8. let show = (({uname,age})=>{
  9. return `名字:${uname},年龄:${age}`
  10. });
  11. console.log(show(user))

访问器属性

  1. let res = {
  2. data: {
  3. age: 18
  4. },
  5. //getter: 读取 getAge => 语法糖 get age
  6. get age(){
  7. return this.data.age;
  8. },
  9. //setter: 设置 setAge => 语法糖 set age
  10. set age(age){
  11. //通过加一些条件判断 能否访问属性
  12. if(age < 18){
  13. console.log('没有成年')
  14. return false;
  15. }
  16. this.data.age = age; //通过判断进行处理
  17. }
  18. }
  19. //修改属性值
  20. res.age = 15
  21. //执行
  22. console.log(res.age) //没有成年

字符串常用方法

1. str.length :字符串长度

2. str.search('查找的值') : 字符串索引 从0开始

3. str.replace('原值','替换的值') : 字符串替换

4. str.slice(开始,结束) : 起始索引,结束索引

5. str.substr() : 起始值和获取的数量,不需要知道到哪结束

6. str.split() : 字符串 => 数组

7. str.join() : 数组 => 字符串

7. toLowerCase() /toUpperCase(): 转换字母大写/小写

数组的常用方法

1. push/pop :尾部添加/删除

  1. let arr = [];
  2. arr.push('a') //在尾部添加返回数组的数量并不返回具体的值
  3. arr.pop() //从尾部开始删除并且返回删除的值

2. unshift/shift :头部添加/删除

  1. let arr = [];
  2. arr.unshift('a') //在尾部添加返回数组的数量并不返回具体的值
  3. arr.shift() //从尾部开始删除并且返回删除的值

3. delete :删除任意数组,删除后还会有空白占位符,需要使用filter()过滤方法

  1. let arr = [1,2,3];
  2. delete arr[1]

4. filter() : 过数组方法

  1. let arr = [1,2,3];
  2. delete arr[1]
  3. arr.filter(item => item);
  4. console.log(arr) //[1,3]

键 值 键值对

keys()键值对方法
console.log(arr.keys())
返回一个迭代对象,使用for-of 遍历对象

  1. let arr = ['小明','男','18'];
  2. //获取键 arr.keys()
  3. for(item of arr.keys()){
  4. console.log(item);
  5. }
  6. //获取值 value
  7. for(item of arr.values()){
  8. console.log(item);
  9. }
  10. //键值对 [key,value]
  11. for(item of arr.entries()){
  12. console.log(item);
  13. }

获取子元素splice

数组的增删改
splice(‘起始位置’,’删除数量’,’附加元素(可选)’);

  1. let arr = ['小明','男','18'];
  2. //删除
  3. console.log(arr.splice(0,2)); // ['男'] 被删除后返回组成的数组
  4. //添加
  5. console.log(arr.splice(1,0,'111'));//数量为0 表示不删除,在当前索引后添加新元素
  6. //更新
  7. console.log(arr.splice(1,1,'五班'));//数量为1 表示在索引1删除1个值后再添加'五班'

排序

sort()
排序模板: a-b 从小到大, b-a从大到小
arr.sort(function(a,b){
retrun a-b
});

  1. let arr = [1,25,163,154,12]
  2. arr.sort((a,b) => a-b) // 从小到大排序
  3. arr.sort((a,b) => b-a) //从大到小排序

数组拼接

let a =[1,1,1,1,]
let b = [2,2,2,2,2]
let c = [3,3,3,3,3]
let d = […a,…b,…c]

数组回调方法

回调函数

  1. //同步回调函数
  2. function add(a,b){
  3. return a + b
  4. }
  5. function sum(a,b,callback){
  6. return callback(a,b)
  7. }
  8. let res = sum(10,50,function(a,b){
  9. return add(a,b)
  10. });
  11. console.log(res)

遍历 forEach / map

  1. let arr = ['小明','18','三班','五年级'];
  2. arr.forEach(item=>item)//没有返回值
  3. arr.map(item=>item) //有返回值

断言 every / some

every(callback) //返回值是布尔值 所有值都满足条件才会返回true
some(callback) // 只要满足一个条件就可以返回true

  1. let arr = [15,8,59,66,3];
  2. arr.every(item => item > 10) //false
  3. arr.some(item => item > 10) //true

过滤 filter / find…

  1. let arr = [15,8,59,66,3];
  2. //filter(callback) //过滤符合的值,并且返回新的数组
  3. arr.filter(item => item > 10) //[15,59,66]
  4. //find(callback) // 返回新数组的第一个值
  5. arr.find(item => item > 10) //15
  6. //findLast(callback) //返回新数组最后一个值
  7. arr.findLast(item => item > 10) //66
  8. //findIndex(callback) //返回新数组第一个索引值
  9. arr.findIndex(item => item > 10) //0
  10. //findeLastOf(callback) //返回新数组最后一个索引值
  11. //lastIndexOf获取最后一个索引值,分两步
  12. //1. 先过滤获取最后一个值
  13. let res = arr.findLast(item => item > 10) //66
  14. //2. 获取当前索引值
  15. arr.lastIndexOf(res) //3

累加 reduce

语法:
reduce(function(前一个值,当前值),{

最终的累加结果,由前一个值返回
}起始值)

  1. //reduce(callback,init)
  2. arr.reduce((prev,curr)=>prev+curr)
  3. //解析
  4. let res = arr.reduce(fucntion(prev,curr){
  5. return prev + curr;
  6. // prev = 1, curr = 2, prev = 3
  7. // prev = 3, curr = 3, prev = 6
  8. // prev = 6, curr = 4, ...
  9. })
  10. console.log(res)

构造函数与类

声明

class

属性

constructor()

方法

method(){} 简写

访问器

get method() / set method()

静态成员

static 关键字

继承

extends / super

  1. //构建函数
  2. class User{
  3. //属性
  4. constructor(name){
  5. this.name = name
  6. }
  7. //方法
  8. say(){
  9. return `${this.name}`
  10. }
  11. //静态
  12. static age = '15'
  13. }
  14. let res = new User('小马')
  15. console.log(res.say())
  16. //继承
  17. class Child extends User{
  18. constructor(name,email){
  19. super(name)
  20. this.email = email
  21. }
  22. speak(){
  23. return `${this.name}:${this.email}`
  24. }
  25. }
  26. let resChild = new Child('小刘','123@qq.com')
  27. console.log(resChild.speak())//小刘 123@qq.com

DOM操作

获取DOM元素

  1. <div class="box"> <1> </div>
  2. <div class="box">2</div>
  3. <div class="box">3</div>
  4. <div class="box">4</div>
  5. <div class="box">5</div>

一组 querySelectorAll()

  1. let item = document.querySelectorAll('.box');
  2. console.log(item)

一个 querySelector()

  1. let item = document.querySelector('.box');
  2. console.log(item)

表单元素获取

关键字forms

关键字 forms 使用name值和id值都可以获取到

  1. <form action="" id="form">
  2. <input type="email" value="123@qq.com" name="email" /><br />
  3. <input type="text" value="小刘" name="uname" /><br />
  4. <input type="password" name="password" value="20230926" />
  5. </form>
  1. const form = document.forms.form;
  2. const email = form.email.value
  3. const password = form.password.value
  4. console.log(password)

let forms = document.forms.ID(表单的ID)
获取表单组件方法forms.email

数据封装

  1. let data = {
  2. uname,age
  3. }
  4. data = JSON.stringify(data,null,4)
  5. console.log(data)

DOM节点转为数组

遍历DOM

  1. children: 元素类型子节点
  2. firstElementChild: 第一个子元素
  3. lastElementChild: 最后一个子元素
  4. nextElementSibling: 下一个兄弟元素
  5. previousElementSibling: 前一个兄弟元素
  6. parentElement: 父元素
  7. contains(): 判断是否是后代元素返回 true/false
  1. <ul class="box">
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. </ul>
  1. // 获取元素
  2. let list = document.querySelector('.box');
  3. //获取元素下的子元素
  4. let item = list.children
  5. //获取第一个子元素
  6. item = item.firstElementChild
  7. //获取最后一个子元素
  8. item = item.lastElementChild
  9. //获取下一个兄弟元素
  10. item = item.nextElementSibling
  11. //获取前一个兄弟元素
  12. item = item.previousElementSibling
  13. //获取子元素的父元素
  14. list = item.parentElement
  15. //判断是否是父元素的后代 返回true/false
  16. list.contains(item)

DOM增删改

创建元素

createElement()

追加元素

append()

创建片断

createDocumentFragment()

后面添加

after()

前面添加

before()

克隆节点

coneNode(true): true深度克隆的到内部所有的后代元素

替换子元素

replaceChild(新节点,旧节点)

删除元素

remove()

  1. //创建元素
  2. let ul = document.createElement('ul');
  3. //追加在body中
  4. document.body.append(ul)
  5. //追加元素
  6. ul.append('<li>追加元素</li>');
  7. //创建文档片段(可以理解为把所有新建的元素统一追加在片段中后,再由片段追加在容器中)
  8. let list = document.createDocumentFragment();
  9. //创建新元素
  10. let p1 = document.createElement('p')
  11. //新元素赋值
  12. p1.textContent = 'Paragraph 1'
  13. //将创建的新元素添加到文档片段中
  14. list.append(p1);
  15. //把文档片段插入容器中
  16. ul.appendChild(list);
  17. //在元素后追加
  18. let box = document.querySelector('.box');
  19. box.after('在box后面追加');
  20. //在元素前面追加
  21. box.before('在box前面追加');
  22. //克隆节点cloneNode(true)为true时候深入克隆所有的后代元素
  23. let cone = ul.cloneNode(true);
  24. //替换元素(元素必须是节点才可以替换)
  25. let newText = box.lastElementChild
  26. let boxFri = box.firstElementChild
  27. box.replaceChild(newText, boxFri)
  28. //删除
  29. newText.nextElementSibling.remove();

元素内容

  1. textContent: 全部内容(js,css,隐藏内容)
  2. innerText: 返回已经渲染(可见)内容
  3. innerHTML: 返回子元素的HTML内容(html)
  4. outerHTML: 返回整个元素以及所有的子元素的HTML标记(html)
  1. let box = document.querySelector('.box');
  2. //显示全部内容包含样式与已经隐藏了内容 并且可以更改
  3. box.textContent
  4. //返回已经解析后的(可见)内容 并且可以更改
  5. box.innerText
  6. //返回元素里的子元素HTML内容 并且可以更改
  7. box.innerHTML
  8. //返回整个元素以及所有子元素的HTML 并且可以更改
  9. box.outerHTML

指定位置添加元素

插入位置配合着API方法使用

  1. beforebegin: 元素自身的前面
  2. afterbegin: 插入元素内部的第一个子节点之前
  3. beforeend: 插入元素内部的最后一个子节点之后
  4. afterend: 元素自身的后面

API方法

  1. insertAdjacentElement(): 指定位置插入元素
  2. insertAdjacentText(): 指定位置插入文本节点
  3. insertAdjacentHTML: 指定位置插入元素节点
  1. //指定位置插入
  2. // let box = document.querySelector('.box');
  3. //指定位置插入必须是元素节点
  4. // box.insertAdjacentElement('beforebegin','111')
  5. //指定位置插入是HTML元素节点
  6. // box.insertAdjacentHTML('beforebegin','111')
  7. //指定位置插入是文本
  8. // box.insertAdjacentText('beforebegin','111')
  9. //创建节点
  10. let h3 = document.createElement('h3');
  11. // 元素自身的前面
  12. h3.append('111');
  13. // 在元素自身的前面插入元素
  14. // box.insertAdjacentElement('beforebegin',h3)
  15. // 在元素自身的后面插入元素
  16. // box.insertAdjacentElement('beforeend',h3)
  17. // 在元素内部第一个子节点插入元素
  18. // box.insertAdjacentElement('afterbegin',h3)
  19. // 在元素内部最后一个子节点插入元素
  20. // box.insertAdjacentElement('afterend',h3)
  21. let h2 = `<h2>标题</h2>`
  22. //方法同上
  23. box.insertAdjacentHTML('beforebegin',h2)
  24. box.insertAdjacentHTML('beforeend',h2)
  25. box.insertAdjacentHTML('afterbegin',h2)
  26. box.insertAdjacentHTML('afterend',h2)
  27. let text = '文本'
  28. box.insertAdjacentText('beforebegin',text)
  29. box.insertAdjacentText('beforeend',text)
  30. box.insertAdjacentText('afterbegin',text)
  31. box.insertAdjacentText('afterend',text)

小案例留言

  1. <input
  2. type="text"
  3. style="height: 25px"
  4. autofocus
  5. onkeydown="submit(this)"
  6. placeholder="输入留言"
  7. />
  8. <ul class="list"></ul>
  1. function submit(eve){
  2. //值不能为空
  3. if(eve.value.length === 0){
  4. alert('不能为空!')
  5. return false;
  6. }else{
  7. //获取容器
  8. const ul = document.querySelector(".list");
  9. //先把值传到新建的节点<li>中,然后插入在ul容器中afterbegin容器的第一个元素,并且添加删除按钮与事件
  10. ul.insertAdjacentHTML("afterbegin",`<li>${eve.value}<button onclick="del(this.parentElement)">删除</button></li>`);
  11. }
  12. //删除事件
  13. function del(eve) {
  14. return confirm('是否直接删除') ? eve.remove(): false;
  15. }
  16. }

dataset对象

dataset: 读取自定义属性 data-自定义属性前缀

  1. <div class="divbox" data-name-user="小刘">
  2. 20231009
  3. </div>
  1. let divbox = document.querySelector('.divbox');
  2. divbox.dataset.nameUser = '小明1'
  3. console.log(divbox.dataset.nameUser) //小明

getComputedStyle计算样式

  1. <style>
  2. .divbox{
  3. width: 100px;
  4. height: 100px;
  5. background-color: darkcyan;
  6. color: #fff;
  7. }
  8. </style>
  9. <div class="divbox" data-name-user="小刘">
  10. 20231009
  11. </div>
  1. //获取元素
  2. let divbox = document.querySelector('.divbox');
  3. //获取width的值,返回字符串
  4. let width = window.getComputedStyle(divbox).width
  5. //设置行内样式
  6. width = parseInt(width) + 100+'px'
  7. divbox.style.width = width

classList对象

classList: 对元素上的class进行增删改查

  1. classList.add(): 添加 可以连续添加(‘a’,’b’)
    如果有数组形式的添加,可使用…arr方式展开数组
  2. classList.contains(): 判断是否包含类名 返回true/false
  3. classList.replace(): 替换(旧值,新值)
  4. classList.remove(): 移除
  5. classList.toggle(): 如果类名存在就删除,如果不存在就添加

事件的添加与删除

事件属性

事件方法中如果使用到了 this 千万不要使用箭头函数(因为它没有自己的this)
它的this是上下文的(执行环境)

onclick: 点击事件

  1. //点击事件
  2. btn.onclick = function(){
  3. console.log(this)
  4. }
  5. //删除点击事件
  6. btn.onclick = null

事件侦听器

addEventListener()

  1. //addEventListener('事件名称',方法)
  2. //可以添加多个同名的事件方法,会按照顺序执行多个事件
  3. btn.addEventListener('click',function(){
  4. console.log('第一个事件')
  5. });
  6. btn.addEventListener('click',function(){
  7. console.log('第二个事件')
  8. });
  9. ...

事件添加,删除,派发实战

addEventListener('click',functuion): 事件添加

removeEventListener('click',function): 删除事件的时候,方法要单独写

dispatchEvent(): 事件派发,把事件委托到别处并且自动执行

  1. ...
  2. //添加事件
  3. box.addEventListener('click',function(){
  4. console.log('1')
  5. })
  6. //事件删除,如果有方法的话,把方法封装后再进行添加和删除如下:
  7. const show = function(){
  8. console.log(1)
  9. }
  10. //先添加事件
  11. box.addEventListenner('click',show);
  12. //删除事件
  13. box.removeEventListener('click',show);
  14. //事件派发
  15. //创建事件对象固定语法 new Event('事件')
  16. const res = new Event('click');
  17. box.dispatchEvent(res)//

定时器

setTimeout(function,time): 一次性执行,只执行一次
setInterval(function,time): 间接式执行
clearTimerout(): 删除一次性执行的定时器
clearInterval(): 删除间接式定时器

  1. //一次性执行
  2. let i = 0;
  3. let out = setTimeout(function(){
  4. i++;
  5. console.log(i)//1
  6. },1000);
  7. //删除一次性执行
  8. clearTimerout(out);
  9. //每间隔1s执行一次
  10. let val = setInterval(function(){
  11. i++;
  12. console.log(i) //每隔一秒将会执行一次
  13. //停止间隔执行
  14. //一般会有一个条件判断,执行停止 用在倒计时上面比较多
  15. clearInterval(val);
  16. },1000);

阻止事件继续冒泡到父元素

eve.stopPropagation(): 事件由内向外,逐级向上传递一直到根元素

eve.preventDefault(): 禁止默认行为,点击后没有任何反应

  1. box.addEventListenner('click',function(){
  2. console.log('父元素')
  3. });
  4. item.addEventListenner('click',function(eve){
  5. console.log('子元素');
  6. eve.stopPropagation(); //点击子元素将不会执行
  7. })

事件代理

ev.currentTarg: 绑定主体
ev.target: 事件触发主体

  1. box.addEventListener('click',function(eve){
  2. console.log(eve.currentTarget) //事件绑定的主体
  3. console.log(eve.target.textContent) //事件触发主体
  4. });

常用表单事件

onchange: 当表单的值发生改变时触发
onsubmit: 提交表单时候触发
onfocus: 获取表单元素焦点时候触发
onblur: 表单失去焦点时候触发
onkeydown: 当按下键盘触发
onkeyup: 当键盘弹起时触发
onkeypress: 当按住键盘触发
onclick: 点击表单元素后触发

模块的声明与导入

使当前的script支持模块功能

<script type="module">
….
</script>

export 导出关键字
import moduleName from './module.js': 导入固定语法

普通导入\导出

  1. //模块A导出
  2. export function multiply(a,b){
  3. return a*b
  4. };
  5. export const PI = 3.14159;
  6. //模块B导入
  7. import {multiply,PI} from './moduleA'
  8. console.log(multiply(2,3))
  9. console.log(PI)

批量导入 * as \ 批量导出

  1. //模块A 导出
  2. function square(x){
  3. return x*x
  4. }
  5. function cube(x){
  6. return x*x*x;
  7. }
  8. export {square,cube}
  9. //模块B 导入 * as
  10. import * as math from './moduleA';
  11. console.log(math.square(3)) //输出 9
  12. console.log(math.cube(3)) //输出 27

别名导入 防止命名冲突 {旧 as 新} \别名导出

  1. //模块A 导出
  2. function square(x){
  3. return x*x
  4. }
  5. function cube(x){
  6. return x*x*x;
  7. }
  8. //别名导出
  9. export {square, cube as cubes}
  10. //模块B 别名导入
  11. import {square as squarer, cubes} from './moduleA'
  12. console.log(squarer(3)) //输出 9

打包导出

比较常用使用类来打包

  1. //模块A
  2. export class User{
  3. constructor(uname){
  4. this.uname = uname
  5. }
  6. greet(){
  7. return `欢迎您${this.uname}`
  8. }
  9. }
  10. //模块B
  11. import {User} from './moduleA';
  12. const user = new User('小刘');
  13. console.log(user.greet())

默认导出(匿名导出)

default 默认导出 关键字

一个模块中只有一个默认导出
``javascript //模块A export default class{ constructor(uname){ this.uname = uname } greet(){ return你好${this.uname}`
}
}

//模块B
//默认导入就不需要使用{} user1 任意命名
import user1 from ‘./moduleA’;
const user = new user1(‘小刘’);
console.log(user.uname) //你好小刘

  1. #### 混合导出
  2. > 默认的不要加{}, add, {a,b}
  3. ```javascript
  4. // 模块A
  5. //默认导出
  6. export default function add(a, b) {
  7. return a + b;
  8. }
  9. export function subtract(a, b) {
  10. return a - b;
  11. }
  12. export function multiply(a, b) {
  13. return a * b;
  14. }
  15. //模块B
  16. import add,{ subtract, multiply } from './moduleA';
  17. console.log(add(2, 3)); // 输出:5
  18. console.log(subtract(5, 2)); // 输出:3
  19. console.log(multiply(2, 3)); // 输出:6

JSON

类型

number ,string ,boolean ,null ,array ,object

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议