03_ES6

news/2024/7/10 22:38:11 标签: es6, javascript, 前端

ES6(在js中进行操作)

使用var声明变量的弊端

  1. var 声明的变量有预解析,造成逻辑混乱,可以先使⽤,后声明,undefined

  2. var 可以重复定义同⼀个变量,第二个会修改变量的值

  3. var ⽤在 for 循环条件中,造成 for 循环的污染的问题

  4. var 声明的变量没有块级作⽤域

let关键字

声明变量

语法:

let  变量名=变量值

好处:

1.变量只能先声明再使用

2.声明的变量不能重复使用

3.let在for循环中不会造成for循环的污染

4.变量存在块级作用域

    <script>
        //不能先使用再声明
        // console.log(name2);
        let name2 = 2;
        //不能声明多个同名变量
        for (let i = 0; i < 3; i++) {
            console.log(i);
        }
        name1 = "后悔"
        //不能在作用域外访问
        //console.log(i);

        //有块级作用域
        {
            let name2="huihui"
            console.log(name2);
        }
        window.onload = function () {
            let btns = document.querySelectorAll(".btn");
            for (let i = 0; i < btns.length; i++) {
                btns[i].onclick = function () {
                    console.log(i);
                }
            }
        }
    </script>

const关键字

声明只读的常量,不可变

格式

const 变量名 =;

在java中使用的是finnal关键字

具备的特点:

1.一旦声明就必须赋值

2.赋值之后不能被修改

3.常量的作用域和let的作用域相同

4.没有预解析

5.引用类型的值可以被修改

<script>
    const name = "huihiui";
    //常量的值不能修改
    console.log(name);
    const names = [2, 3];
    //引用类型,可以修改对象的值
    names[0] = 4;
    //有块级作用域
    if (1) {
        const age = 10;
        console.log(age);
    }
    console.log(age);
</script>

模板字符串

拼接字符串,使代码可读性更好

格式

let str=`固定字符${变量或者表达式}`;
console.log(`我是${name},今年${age},性别为${gender}`);

解构语法

数组使用的方括号进行包裹

对象使用的是大括号进行包裹

对象解构

这种类型的解构使用的频率较多,有多个参数时使用

1.变量名和对象的属性名必须一致

let obj = {
    name: "张三",
    age: 20,
}
let {name, age} = obj;
console.log(name, age);

2.可以重新声明变量名

let {name: myname} = obj;
console.log(myname);

3.内置对象的简化

let {random}=Math;
console.log(fandomF()F)
数组解构

​ 使用次数较少,用于获取数组中的元素

注意:里面的变量值和数组的索引有关,与变量的顺序无关

1.取所有的元素

let  arr=[1,2,3,4]
let  [a,b,c,v]=arr;
console.log(a,b,c,v);

2.不连续取元素,使用,进行占位

let [,,c,d] =arr;
console.log(c,d);//只获取最后两个元素

3.取二维数组的值

let arr2=[1,2,[3,4]];
let [a,b,[c,d]]=arr2;
console.log(a,b,c,d);
字符串解构

​ 使用的频率更少,用于获取字符串中的字符

let str="skldj";
let [a,b,c]=str;
console.log(a,b,c);//只获取前三个字符
应用场景

​ 交换两个变量的值

let a=1,b=2;
[a,b]=[b,a];
console.log(a,b);
对象的简写

​ 当对象的属性名,和值的变量名一致的时候,可以进行简写

let url=" ",type="",data="",success=functionF(){}
$(function{
	$.ajax(
		url,
		type,
		data,
		success()
	)
})
函数参数默认值

​ 若传进来的参数的值为undefined,没有设置默认值计算的时候就会出现NaN

格式

funciton 函数名(参数=默认值){ 
 
}

当传进来的参数时undefined时 就会将参数组的值设置为默认值0

function fun(a=0,b=0,c=0){
	reture a+b+c
}
console.log(fun(1, 2, 3));
console.log(fun());
函数参数的解构

​ 对传进来的参数进行解构,数组使用[],对象使用{}

1.对象参数的解构

function fun({name,age}){
		console.log(name,age);//获取属性值
}
fun({name:"张三",age:20});

2.数组的参数解构

function fun2[(a,b,c]){//里面的参数只和数组的索引有关
console.log(a,b,c);
}
fun2([1,3,2,5])
对象解构参数的默认值

​ 对象没有传参数会造成undefined,报错

​ 设置默认值:赋值一个空对象,并向空对象里面添加默认的值

function fun({name="灰灰",age=20}={}){
		console.log(name,age);
}
fun({name="穆棱",age=25});//结果就是  穆棱  25
fun(); //结果就是  灰灰  20
rest(剩余)参数

搭配的变量就是一个数组,将多艺的参数放在数组中

…rest只能放在参数的最后,名字可以随便定义,作用和java中的可变参数一样

function fun(a,b,...rest){
	console.log(arguments);//只能获取所有的实参
	console.log(a);//获取索引为0的值
    console.log(rest);//获取后面所有的元素	
}
fun(1,2,3,4)
function fun(...rest){
	console(rest);//作用和arguments的作用一样,取得传进来的所有元素
}
fun(1,2,5);
扩展运算符

1.使用"…rest"将数组中的元素拆分打印

let arr=[1,2,3];
console.log(...arr);//将arr进行拆分

​ 2.对象合并对象方式一(添加属性)

​ 合并的时候,同名的属性会覆盖前面的

​ 不能使用console.log(…obj)取对象的属性值

let obj={name:"张三",age:20};
let  obj2={email:"xxxx",...obj}//使用...obj的方式取所有的属性

​ 3.对象合并对象方式二(添加一个对象),关键字"Object.assign"

​ 这种方式会改变原有的对象的结构,需要使用空对象进行添加,这样才能合并对象

let obj={name:"张三",age:20};
let obj2={address:"四川",email:223};
let  obj3={}
Object.assign(obj3,obj1,obj2);

​ 4.数组类型

   function fun(a,b,c){
       console.log(a, b, c);
   }
   fun(...arr);
扩展运算符在解构中的使用
let arr=[1,2,3]

let [a,...b]=arr

console.log(a)

console.log(b)

箭头函数

​ **作用:**对匿名函数的简化,只能使用在匿名函数,有匿名函数的地方就使用箭头函数

形式1,省略function

    let fun3=()=>{}
    let fun4=(a,b)=>{
          console.log(a, b);
      }

形式二,只有一个形参可以省略()

let fun5=a=>{
    console.log(a, b);
}

形式三,函数只有一条语句,可以省略{}

let fun6 = a =>  console.log(a);

形式四,只有一条语句,并且返回结果,省略return

let fun7=(a,b)=>a+b;

Promise对象

使用前引用jQuery文件

作用:

避免回调地狱的情况出现,将异步代码改成像同步代码,方便后期的维护

三种状态

不在成功和失败状态,初始状态是pending

成功时交给一个人处理,状态是fulfiled

失败时就交给另一个人处理,状态是rejected

promise特点

1.对象状态不受外界的影响,只有异步操作的结果可以决定是哪一个状态

2.状态一旦改变,就不会再变,任何时候都可以得到这个结果

回调函数

在这里插入图片描述

promise的基本语法

使用then链式特点

​ 1.第一个then执行后会执行第二个then

​ 2.then中的返回值会被下一个then进行接收

​ 3.若返回的是promise对象,里面是对象内部调用resolve的实际参数

<script>
    //初始化promise
    Promise p=new Permise();
	$.ajax({
        url:"../a/a.json",
        success(data){
            resolve(data);//初始状态到成功状态
        },
        error{
        reject(data);//初始状态到失败状态
    }
    });
    p.then(data=>{
        console.log("处理成功之后的业务")
    }).catch(data=>{//使用链式语法
         console.log("处理失败的业务")
    })
</script>

使用promis解决回调地狱问题

此处没有处理回调失败的结果

步骤:

​ 1.创建promise对象

​ 2.在对象里面写一个ajax请求

​ 请求成功就执行resolve()方法

​ 请求失败执行reject()方法

​ 3.接着调用promise对象的then方法

​ 4.使用链式语法的时候需要返回第二个promise对象

<script src="../js/jquery-2.1.4.js"></script>
<script>
  //发送三个请求
  let p1 = new Promise((resolve,reject)=>{
    $.ajax({
      url:'../data/a.json',
      success(res){
        resolve(res)
      },
      error(err){
        reject(err)
      }
    })
  })
//p2和p3的写法和p1相同
  let p2 = new Promise((resolve,reject)=>{
  ......
  })
  let p3 = new Promise((resolve,reject)=>{
    ......
    })
  })
  //依次处理请求成功之后的业务
  //使用链式语法的话需要返回后面的对象
  p1.then(data=>{
    console.log("处理第一个请求成功之后的业务");
    return p2;
  }).then(data=>{
    console.log("处理第二个请求成功之后的业务");
    return p3;
  }).then(data=> {
    console.log("处理第三个请求成功之后的业务");
  })
</script>

Promise常用的方法

1.all方法
//发送三个请求
let p1 = new Promise((resolve,reject)=>{
  $.ajax({
    url:'../data/a.json',
    success(res){
      resolve(1)
    },
    error(err){
      reject(1)
    }
  })
})
let p2 = new Promise((resolve,reject)=>{
  ...
})
let p3 = new Promise((resolve,reject)=>{
  ....
})
//all方法,传进来的是数组
Promise.all([p1,p2,p3]).then(data=>{
    console.log("全部成功");
    console.log(data,"--------------------");
}).catch(data=>{
    console.log("有失败的请求");
    console.log(data,"======================");
})

全部成功就返回成功,将所有的对象的返回值组成数组,传递给回调函数

有一个失败返回失败,将第一个失败的返回值传递给回调函数

在这里插入图片描述

2.rece方法
//发送三个请求
let p1 = new Promise((resolve,reject)=>{
  $.ajax({
    url:'../data/a.json',
    success(res){
      resolve(1)
    },
    error(err){
      reject(1)
    }
  })
})
let p2 = new Promise((resolve,reject)=>{
  ...
})
let p3 = new Promise((resolve,reject)=>{
  ....
})
 Promise.race([p1,p2,p3]).then(data=>{
        console.log("全部成功");
        console.log(data,"--------------------");
    }).catch(data=>{
        console.log("有失败的请求");
        console.log(data,"======================");
    })

​ 除了第一个的实例发生变化会出现失败,其他的实例发生变化都会打印成功,并且将第一个p的返回值给了回调函数

情况1
在这里插入图片描述

情况2

在这里插入图片描述


http://www.niftyadmin.cn/n/1009622.html

相关文章

【总结】1727- 前端开发中如何高效地模拟数据?

&#x1f449; 「文章推荐」 详细聊一聊 Vue3 动态组件深入浅出 Vue3 自定义指令6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验 在开发和测试工作中&#xff0c;mock 数据非常实用。mock 数据是指…

04 - C++学习笔记: 循环语句和跳转语句

在C编程中&#xff0c;循环语句和跳转语句是非常重要的控制结构。循环语句允许重复执行一段代码&#xff0c;而跳转语句允许在程序执行过程中改变执行的流程。本篇笔记将介绍C中常用的循环语句和跳转语句&#xff0c;并通过例子进行说明。 &#x1f501;循环类型 C 编程语言提…

window系统安装node,配置环境变量npm指令

首先 你要在本地创建一个文件夹 来放node window我们直接访问node下载地址 根据自己的电脑配置 选择对应的版本 这里的话 我建议还是选择 .msi 文件 处理会方便一点 下砸好之后我们直接双击运行 然后 下一步 Next 然后 勾选下面的协议 然后 继续下一步 这个都没必要看 只能说…

MybatisPlus从入门到精通-基础篇

文章目录 一、概述二、快速入门2.1 数据库准备2.2 创建springboot工程2.3 实体类准备2.4 测试MybatisPlus 三、MP常用配置3.1 设置表映射规则3.2 设置主键生成策略3.3 设置字段映射关系3.4 设置字段和列名的驼峰映射3.5 日志 四、基本使用4.1 增加&#xff08;插入&#xff09;…

javaweb学习3

javascript入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript"> // <!-- 可以在head和body嵌入script执行顺序从上而…

证明最小化负对数似然函数的学习策略等价于最小化 KL 散度的学习策略

首先&#xff0c;让我们定义一些符号&#xff1a; p data ( x ) p_{\text{data}}(x) pdata​(x)&#xff1a;真实数据的概率分布 p model ( x ; θ ) p_{\text{model}}(x; \theta) pmodel​(x;θ)&#xff1a;由参数 θ \theta θ 确定的模型的概率分布 D \mathcal{D} D&…

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库

对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…

关于antd的form表单组件的一个天坑。。。

事情是这样的&#xff0c;项目中遇到了一个问题&#xff0c;用表单包裹着着一个Switch组件&#xff0c;提交表单的时候可以将Switch的值一起提交。 form.setFieldsValue({power:0})<Form.Item label"Switch" name"power"><Switch checked{flag}…