那些你面试必须知道的ES6知识点

news2024/11/8 2:49:50

目录

  • 1、var、let、const的区别
  • 2、作用域考题
  • 3、合并两个对象
  • 4、箭头函数和普通函数的区别
  • 5、Promise有几种状态
  • 6、find和filter的区别
  • 7、some和every的区别

1、var、let、const的区别

区别一:

var有变量提升,而let和const没有

 	<script>
      console.log(str); //undefined
      var str = "你好";
    </script>
 	<script>
      console.log(str); //
      let str = "你好";
    </script>
    <script>
      console.log(str); //
      const str = "你好";
    </script>

在这里插入图片描述

区别二:

var可以多次声明一个变量
let和const不能多次声明一个变量

	<script>
      var str = "你好";
      var str = '我好'
      var str = '大家好'
      console.log(str); //大家好
    </script>
	<script>
      let str = "你好";
      let str = '我好'
      let str = '大家好'
      console.log(str); //大家好
    </script>
    <script>
      const str = "你好";
      const str = '我好'
      const str = '大家好'
      console.log(str); //大家好
    </script>

在这里插入图片描述

区别三:

var、let声明变量、
const声明常量
var和let声明的变量可以再次赋值,但是const不可以再次赋值了。

	<script>
      var str1 = "你好";
      let str2 = "我好";
      const str3 = "大家好";
      str1 = "哈哈";
      str2 = "哈哈哈";
      str3 = "哈哈哈哈";
      console.log(str1); //哈哈
      console.log(str2); //哈哈哈
      console.log(str3); //报错,/*  */Uncaught TypeError: Assignment to constant variable.
    </script>

区别四:

var声明的变量没有块级作用域
let和const声明的变量有自身块级作用域

	 <script>
      if (true) {
        var str = "哈哈哈";
      }
      console.log(str);//哈哈哈
    </script>
	 <script>
      if (true) {
        let str = "哈哈哈";
      }
      console.log(str);// ReferenceError: str is not defined
    </script>
	 <script>
      if (true) {
        const str = "哈哈哈";
      }
      console.log(str);// ReferenceError: str is not defined
    </script>

2、作用域考题

考题一:let和const没有变量提升性

 	<script>
      console.log(str); //undefined
      var str = "你好";
      console.log(num); //报错
      let num = 10;
    </script>

考题二:

 <script>
      function demo() {
        var n = 2;
        if (true) {
          var n = 1;
        }
        console.log(n); //1
      }
      demo();
    </script>
<script>
	   function demo() {
        let n = 2;
        if (true) {
          let n = 1;
        }
        console.log(n); //2
      }
      demo();
</script>

考题三:可以修改引用对象里面的值,不能直接修改本身

 <script>
      const obj = {
        a: 1,
      };
      obj.a = 11111;
      console.log(obj);

      const arr = ["a", "b", "c"];
      arr[0] = "aaaaa";
      console.log(arr);
    </script>

在这里插入图片描述

 <script>
      const obj = {
        a: 1,
      };
      obj = {
        a: 2,
      };
      console.log(obj);

      const arr = ["a", "b", "c"];
      arr = ["hh"];
      console.log(arr);
  </script>

在这里插入图片描述
直接报错。

3、合并两个对象

方式一:Object.assign

 <script>
      let a = {
        a: 1,
        b: 2,
      };
      let b = {
        a: 4,
        b: 5,
        c: 6,
      };
      const obj1 = Object.assign(a,b);
      console.log(obj1);
    </script>

如果有相同的属性值,后者覆盖前者。

方式二:…扩展运算符

<script>
      let a = {
        a: 1,
        b: 2,
      };
      let b = {
        a: 4,
        b: 5,
        c: 6,
      };
      const obj1 = {...a,...b};
      console.log(obj1);
    </script>

方式三:自己封装方法

	<script>
      let a = {
        a: 1,
        b: 2,
      };
      let b = {
        a: 4,
        b: 5,
        c: 6,
      };
      function merge(target, source) {
        for(let key in source) {
          target[key] = source[key];
        }
        return target;
      }
      console.log(merge(a, b));
    </script>

4、箭头函数和普通函数的区别

1、this指向问题

箭头函数的this指向在定义的时候就决定了,不能通过(call、apply、bind)改变
箭头函数的this指向定义的时候,指向外层第一个普通函数,如果为最顶层则指向window。

 <script>
      let obj = {
        a: function () {
          console.log(this);
        },
        b:()=>{
          console.log(this);
        }
      };
      obj.a();
      obj.b();
    </script>

在这里插入图片描述
使用call改变this指向,无效果.
apply和bind同样。

 <script>
      let obj = {
        a: function () {
          console.log(this);
        },
        b:()=>{
          console.log(this);
        }
      };
      obj.a();
      obj.b.call(obj);
    </script>

在这里插入图片描述
2、箭头函数不能new(不能实例化成构造函数)

<script>
      let obj = {
        a: function () {
          console.log(this);
        },
        b:()=>{
          console.log(this);
        }
      };
      let objA = new obj.a();
      let objB = new obj.b();
    </script>

在这里插入图片描述
3、箭头函数没有prototype(原型)

<script>
      let obj = {
        a: function () {
          console.log(this);
        },
        b:()=>{
          console.log(this);
        }
      };
      console.log(obj.a.prototype)
      console.log(obj.b.prototype)
</script>

在这里插入图片描述
4、箭头函数没有arguments

	<script>
      let ff = function () {
        console.log(arguments);
      };
      let fn = () => {
        console.log(arguments);
      };
      ff();
      fn();
    </script>

在这里插入图片描述

 <script>
      let ff = function () {
        return fn = () => {
        console.log(arguments);
      };
      };
     
      ff()();
    </script>

如果箭头函数的外层第一个普通函数有arguments,则改箭头函数的arguments为父级作用域的arguments。

我们可以通过Rest(剩余)运算符解决箭头函数没有arguments的问题。

<script>
      let ff = function() {
        console.log(arguments);

      } 
      let fn = (...res) => {
        console.log(res);
      };
      ff(1)
      fn(1)
    </script>

在这里插入图片描述

5、Promise有几种状态

  1. 使用promise的时候,给它一个承诺,我们可以将他划分为三个阶段
  • pending(待定),执行了executor,状态还在等待中,没有被兑现,也没有被拒绝
  • fulfilled(已兑现),执行了resolve函数则代表了已兑现状态
  • rejected(已拒绝),执行了reject函数则代表了已拒绝状态
  1. 简单理解:
  • 你承诺自己明天开始好好学习(还未到明天,此时为待定状态
  • 时光飞逝,到了第二天你去图书馆好好学习了(已兑现状态
  • 时光飞逝,到了第二天你因为某些事情而无法去图书馆学习(已拒绝状态
  1. 状态只要从待定状态,变为其他状态后,则状态不能再改变。
  • 比如从pengding状态变为fulfilled状态后,则不能在从fulfilled状态变为rejected状态
  • 同样从pengding状态变为rejected状态后,则不能在从rejected状态变为fulfilled状态

举个栗子:

	const p = new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('成功了')
                reject('失败了')
            },1000)
        })
        p.then(resolve=>console.log(resolve)).catch(reject=>console.log(reject))
        //成功了

当我调用resolve之后,在调用reject是无效的,因为状态已经发生改变,并且是不可逆的。

6、find和filter的区别

区别一:返回的内容不同

filter 返回是新数组
find 返回具体的内容

区别二:

find :匹配到第一个即返回
filter : 返回整体(每一个匹配到的都返回)

	<script>
      let arr = [1, 2, 3, 4, 5];
      let newArr1 = arr.find((item) => {
        return item > 2;
      });
      let newArr2 = arr.filter((item) => {
        return item > 2;
      });
      console.log(newArr1);
      console.log(newArr2);
      console.log(arr);
      //都不改变原数组
    </script>

在这里插入图片描述

7、some和every的区别

some ==》 如果有一项匹配则返回true
every ==》 全部匹配才会返回true

<script>
      let arr = [1, 2, 3, 4, 5];
      let newArr1 = arr.some((item) => {
        return item > 2;
      });
      let newArr2 = arr.every((item) => {
        return item > 2;
      });
      console.log(newArr1);
      console.log(newArr2);
    </script>

在这里插入图片描述

 <script>
      let arr = [1, 2, 3, 4, 5];
      let newArr1 = arr.some((item) => {
        return item > 0;
      });
      let newArr2 = arr.every((item) => {
        return item > 0;
      });
      console.log(newArr1);
      console.log(newArr2);
    </script>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1114706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英伟达禁售?FlashAttention助力LLM推理速度提8倍

人工智能领域快速发展&#xff0c;美国拥有强大的AI芯片算力&#xff0c;国内大部分的高端AI芯片都是采购英伟达和AMD的。而为了阻止中国人工智能领域发展&#xff0c;美国频繁采取出口管制措施。10月17日&#xff0c;美国拜登突然宣布&#xff0c;升级芯片出口禁令。英伟达限制…

【openwrt学习笔记】Dying Gasp功能和pstore功能的配置(高通 ipq95xx)

目录 一、Dying Gasp信号1.1 概念1.2 实现原理 二、pstore 功能2.1 概念2.2 实现原理 三、openwrt中开启pstore功能3.1 软硬件参数3.2 各文件修改3.2.1 defconfig3.2.2 dts(ipq9574-default-memory.dtsi)3.2.3 fs/pstore/ram.c 四、测试4.1 挂载4.2 触发命令和效果 参考资料&am…

cocos creator 在网页中调试的时候直接代码调试方法

cocos creator 在网页中调试的时候直接代码调试方法

数据结构───顺序表(梦开始的地方)

从一个编程小白到入门&#xff0c;大学选的软件工程&#xff0c;从大一开始就没有真正的了解这个专业&#xff0c;更别说以后的发展方向。活了几十年&#xff0c;也不知道自己究竟要成为一个什么样的人。似乎在大二的某一天&#xff0c;忽然意识到我不该如此庸碌下去&#xff0…

对话 L2 潜力新星 Mantle:模块化理念推动生态可持续建设

作为一个由 DAO 主导实现快速增长&#xff0c;致⼒推动⼤众应⽤与数字虚拟资产治理技术—— Mantle 如何凭借模块化设计理念、可扩展性技术优势、高效能数据处理机制在 Layer2 版图中成长为新晋潜力项目&#xff1f;从测试网到主网上线&#xff0c;Mantle 经历了数个技术更新阶…

【(数据结构)— 双向链表的实现】

&#xff08;数据结构&#xff09;— 双向链表的实现 一.双向链表的结构二. 双向链表的实现2.1 头文件 ——双向链表的创建及功能函数的定义2.2 源文件 ——双向链表的功能函数的实现2.3 源文件 ——双向链表功能的测试2.4 双向链表各项功能测试运行展示2.4.1 双向链表的初始化…

发现一不错的编程助手 Amazon CodeWhisperer

Amazon CodeWhisperer 是一款 AI 编程助手&#xff0c;旨在为开发人员提供智能化的编程辅助工具。作为一款基于人工智能的编程助手&#xff0c;CodeWhisperer 的目标是提高开发人员的生产效率、降低开发成本&#xff0c;并提供高质量的编程解决方案。 1.安装过程参考官网 htt…

C++11函数适配器bind() --- C++11新语法bind() 你了解多少?什么是适配器???

文章目录 1.介绍头文件定义原型 2.引入2.1现有语法无法解决2.2bind的文档阅读2.3bind()绑定函数对于2.1问题的解决 1.介绍 头文件 #include <functional> 定义 bind函数定义在头文件中&#xff0c;是一个函数模板&#xff0c;它就像一个函数包装器(适配器)&#xff0c…

苹果 AirPods Pro 2 耳机新固件(6A305)

苹果公司对采用 Lightning 端口和 USB-C 端口的 AirPods Pro 2 耳机&#xff0c;推出了内部编号为 6A305 的全新固件&#xff0c;高于 10 月 10 日发布的 6A303 更新。用户无需手动更新&#xff0c;只需将 AirPods 通过蓝牙连接到 iPhone &#xff0c;此时便会自动安装新的固件…

甄知科技张礼军:数智化转型助企业破茧成蝶!

数智化浪潮滚滚向前&#xff0c;正席卷各行各业&#xff0c;带领企业从数字化时代跨入数智化时代。可什么是数智化&#xff1f;如何实现数智化转型&#xff1f;已经成为横亘在无数企业面前的大难题&#xff01; 事实上&#xff0c;数智化是数字化、AI和业务三个要素的交集&…

SQLServe联合主键、联合索引、唯一索引,聚集索引,和非聚集索引、主键、唯一约束和外键约束、索引运算总结

联合主键 SQL server 中给表增加联合主键的两种方法 第一种方法&#xff0c;新建表时增加联合主键&#xff1a; create table t_students(id int not null,name varchar(10) not null Primary Key (id, name),age int,dept_id int )注&#xff1a;联合主键的列需要限制非空约…

操作系统【OS】系统调用

系统调用 定义 操作系统对应用程序和程序员提供的接口用户程序执行陷入指令&#xff08;Trap或访管指令&#xff09;来发起系统调用&#xff0c;请求操作系统提供服务OS 通过提供系统调用避免用户程序直接访问外设【应用程序通过系统调用使用OS的设备管理服务】操作系统不同, …

弹出框,使用树结构查询数据

效果如下: 描述:希望点击某个按钮,弹出一个窗口,然后通过下拉框,点击下拉框里面的组织信息,然后查询对应组织的成员对象列表,并展示到表格中 HTML代码(最主要的就是树的那个): <el-dialog :visible.sync="TesteePage.showDialog" width="70%&quo…

初出茅庐的小李博客之Windows11运行Linux记录

安装教程 超简单&#xff0c;不安装虚拟机&#xff0c;Windows11运行Linuxhttps://zhuanlan.zhihu.com/p/393484912 注意事项 出现错误有可能是少了驱动 驱动下载地址 https://link.zhihu.com/?targethttps%3A//wslstorestorage.blob.core.windows.net/wslblob/wsl_updat…

bp(back propagation)

文章目录 定义过程前向传播计算过程计算损失函数&#xff08;采用均方误差MSE&#xff09;反向传播误差&#xff08;链式法则&#xff09;计算梯度更新参数 简单实例 定义 反向传播全名是反向传播误差算法&#xff08;Backpropagation&#xff09;&#xff0c;是一种监督学习方…

HZOJ-271: 滑动窗口

题目描述 ​ 给出一个长度为 N&#xfffd; 的数组&#xff0c;一个长为 K&#xfffd; 的滑动窗口从最左移动到最右&#xff0c;每次窗口移动&#xff0c;如下图&#xff1a; 找出窗口在各个位置时的极大值和极小值。 输入 ​ 第一行两个数 N,K&#xfffd;,&#xfffd;。 …

win yolov5.7 tensorRT推理

安装TensorRT 下载tensorrt8.xx版本&#xff0c;适用于Windows的cuda11.x的版本 官方下载地址https://developer.nvidia.com/nvidia-tensorrt-8x-download 把tensorRT里面的bin、include、lib添加到本机CUDA中&#xff0c;CUDA需要加入环境变量中 配置虚拟环境 torch的版本…

Confluence最新版本(8.6)安装

软件获取 Confluence 历史版本下载地址&#xff1a;Confluence Server 下载存档 | Atlassian Atlassian-agent.jar https://github.com/haxqer/confluence/releases/download/v1.3.3/atlassian-agent.jar MySQL 驱动包 MySQL :: Download MySQL Connector/J (Archived Ve…

举个栗子!Alteryx 技巧(6):从 API 中提取数据

你听说过从 API 中提取数据吗&#xff1f;API 是指应用编程接口&#xff0c;是计算机之间或计算机程序之间的连接&#xff0c;它是一种软件接口&#xff0c;让不同的软件进行信息共享。对于很多数据分析师来说&#xff0c;他们常常需要从 API 中提取数据&#xff0c;那么如何快…

ASEMI肖特基二极管MBR10200CT在电子电路中起什么作用

编辑-Z 肖特基二极管MBR10200CT是一种特殊类型的二极管&#xff0c;可以在电子电路中起到多种作用。 首先&#xff0c;MBR10200CT具有非常低的正向电压丢失和快速的开关速度。这使得它非常适合用作整流器。在直流电源中&#xff0c;MBR10200CT可以将交流电转换为直流电&#x…