前端面试02(JS)

文章目录

    • 前端面试02(JS)
        • 1、js的组成
        • 2、js内置对象
        • 3、操作数组的方法
        • 4、数据类型的检测方法
        • 5、闭包是什么
        • 6、前端内存泄漏
        • 7、事件委托
        • 8、基本数据类型和引用数据类型
        • 9、原型链
        • 10、JS如何实现继承
      • 🎉写在最后

前端面试02(JS)

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
在这里插入图片描述
💥个人主页:code袁
💥 所属专栏:前端知识

1、js的组成
1.ECMAscript:js的核心内容,描述了基础的语法。
2.文档对象模型(DOM):DOM把整个HTML页面划分为元素构成的文档。
3.浏览器对象模型(BOM):对浏览器窗口进行访问。
2、js内置对象
Sting Boolean  Number Array Object Function Math Data RegExp
Math-> abs(),sqrt() max(),min()
Data->new Data() getYear()
Arry->
String->concat() length,slice(),split()
3、操作数组的方法
push() pop() sort() splice() unshift() shift()concat() map()
filter() reduce() isArray()
那些方法会改变元素组
   pop() push() unshift() shift() sort()reverse()
4、数据类型的检测方法
typeof()对基本数据类型没问题,引用数据类型不适用
instanceof()只能判断引用数据类型,不能判断基本数据类型
constructor()基本和引用大概都能判断
Object.prototype.toString.call()  都能判断出来
<script>
    console.log(typeof 666);
    console.log([] instanceof Array);
    console.log("abc" instanceof String);
    console.log("abc".constructor == String);
    var abc = Object.prototype.toString;
    console.log(abc.call(2));
    console.log(abc.call("aaaa"));
  </script>
5、闭包是什么
闭包是指一个函数内部定义的函数,这个内部函数可以访问到外部函数的变量。换句话说,闭包是由函数和
与其相关的引用环境组合而成的实体。当一个函数返回了一个内部函数后,即使该函数已经执行结束,
但是内部函数引用的外部变量依然保存在内存中,这种行为称为闭包。
闭包可以用来实现函数式编程中的一些特性,如函数柯里化、延迟计算等.

闭包的特点
可以重复的利用变量,并且变量不会污染全局的一种机制这个变量一直保存在内存中。
缺点:闭包过多会消耗内存,导致性能下降。
使用场景:防抖,节流,函数嵌套
6、前端内存泄漏
JS里已经分配内存地址的对象,但是由于长时间没有释放或者消除,造成长期占用内存的现象。
由于一些错误的编码或者设计导致的内存无法被正确释放的问题。这可能会导致页面性能下降、
页面崩溃或者浏览器崩溃等严重后果。

常见类型

1.未及时清理不再使用的变量或对象:如果在代码中有一些变量或对象不再被使用,但是没有被及时清理,
这些变量或对象会一直占用内存,导致内存泄漏。
2.事件监听器未正确移除:如果在页面中添加了事件监听器,但是在元素被移除或者页面跳转时
未正确移除这些事件监听器,会导致内存泄漏。
3.循环引用:如果对象之间存在循环引用,即使这些对象不再被使用,由于彼此之间相互引用,
导致垃圾回收器无法正确识别这些对象为垃圾,从而无法释放内存。
4.定时器未清理:如果在代码中使用了定时器,但是在页面卸载或者不再需要定时器时未清理,
会导致定时器一直在运行,占用内存。 
7、事件委托
事件委托是一种常见的前端开发技术,也称为事件代理。它利用事件冒泡的原理,将事件处理程序添加
到父元素而不是每个子元素上。当子元素触发事件时,事件会冒泡到父元素,然后由父元素统一处理。

好处

1.减少内存消耗:通过将事件处理程序添加到父元素,而不是每个子元素,可以减少内存消耗,
因为只需要一个事件处理程序。
2.简化代码:通过事件委托,可以减少重复的事件处理程序代码,使代码更加简洁和易于维护。
3.提高性能:减少了事件处理程序的数量,可以提高页面的性能,特别是在处理大量元素时。
总的来说,事件委托是一种优化前端开发的技术,可以简化代码、提高性能,并减少内存消耗。
8、基本数据类型和引用数据类型
在JavaScript中,数据类型可以分为基本数据类型和引用数据类型两种。

1. 基本数据类型(Primitive Data Types):
   - 数字(Number):整数和浮点数。
   - 字符串(String):文本数据。
   - 布尔值(Boolean):true 或 false。
   - undefined:表示未定义的值。
   - null:表示空值。
   - Symbol(ES6新增):唯一且不可改变的值。
   - BigInt(ES11新增):用来表示大整数。

2. 引用数据类型(Reference Data Types):
   - 对象(Object):包括普通对象、数组、函数等。
   - 函数(Function):一种特殊的对象,具有可调用的行为。
   - 数组(Array):一种特殊的对象,用于存储多个值。
   - 日期(Date):表示日期和时间。
   - 正则表达式(RegExp):用于匹配字符串的模式。

基本数据类型存储在栈内存中,而引用数据类型存储在堆内存中,并且在栈内存中存储的是引用数据类型的地址。
基本数据类型是按值访问的,而引用数据类型是按引用访问的。
在操作基本数据类型时,会直接操作其实际的值,而在操作引用数据类型时,
实际上是操作其在堆内存中的地址。

var obj = {
      name: "張三",
      age: 18,
    };
    var obj1 = obj;
    obj1.name = "李四";
    console.log(obj);
    console.log(obj1);
9、原型链
原型链是JavaScript中用于实现继承和对象属性查找的机制。它是为构造函数的实例共享属性和方法。
每个对象都有一个原型(prototype)属性,指向另一个对象,这个对象的原型又可以指向另一个对象,、
以此类推,形成了一个链式结构,即原型链。

 function person() {
      this.say = function () {
        console.log("说");
      };
    }
    person.prototype.look = function () {
      console.log("话");
    };
    var p1 = new person();
    var p2 = new person();
    p1.say();
    p2.say();
    p1.look();
    p2.look();
    console.log(p1.__proto__ === person.prototype);

当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着原型链向
上查找,直到找到对应的属性或方法,或者到达原型链的顶端(即Object.prototype)。这样就实现了属性和方法的继承。

在原型链中,每个对象都有一个原型对象(prototype),可以通过对象的__proto__属性来访问。
当我们创建一个对象时,该对象会自动关联到一个原型对象,可以通过构造函数的prototype属性来指定对象的
原型。子对象可以通过原型链继承父对象的属性和方法,实现代码的复用和继承。

原型链是JavaScript中非常重要的概念,它是实现对象之间继承关系的基础,也是理解JavaScript中对象属性查找机制的关键。

当我们访问一个对象的属性或方法时,如果对象本身没有该属性或方法,JavaScript会沿着原型链向上查找,
直到找到对应的属性或方法或者到达顶端的Object.prototype。
10、JS如何实现继承
在JavaScript中,实现继承的方式有多种,其中包括
1.原型链继承
function Parent() {
    this.name = 'Parent';
}

function Child() {
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

var child = new Child();
console.log(child.name); // 输出 'Parent'

2.构造函数继承
function Parent() {
    this.name = 'Parent';
}

function Child() {
    Parent.call(this);
}

var child = new Child();
console.log(child.name); // 输出 'Parent'

3.组合继承
function Parent() {
    this.name = 'Parent';
}

function Child() {
    Parent.call(this);
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

var child = new Child();
console.log(child.name); // 输出 'Parent'

4.原型式继承
5.寄生式继承
6.ES6中的class继承
class Parent {
    constructor() {
        this.name = 'Parent';
    }
}

class Child extends Parent {
    constructor() {
        super();
    }
}

let child = new Child   console.log(child.name); // 输出 'Parent'

🎉写在最后

🍻伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞👍或 Star ✨支持一下哦!手动码字,如有错误,欢迎在评论区指正💬~

你的支持就是我更新的最大动力💪~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频

第一部分&#xff1a;文本生成视频 1. 文本生成视频概述 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;视频制作领域也迎来了创新的浪潮。文本生成视频是其中的一项令人激动的进展&#xff0c;它利用自然语言处理技术将文本内容转化为视频。这项技术在广…

element-ui出的treeselect下拉树组件基本使用,以及只能选择叶子节点的功能,给节点添加按钮操作

element-ui出的treeselect下拉树组件基本使用&#xff1a;Vue通用下拉树组件riophae/vue-treeselect的使用-CSDN博客 vue-treeselect 问题合集、好用的树形下拉组件&#xff08;vue-treeselect的使用、相关问题解决方案&#xff09;-CSDN博客 需求1&#xff1a;treeselect下拉…

Bert的一些理解

Bert的一些理解 Masked Language Model (MLM)Next Sentence Prediction (NSP)总结 参考链接1 参考链接2 BERT 模型的训练数据集通常是以预训练任务的形式来构建的&#xff0c;其中包括两个主要任务&#xff1a;Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。…

【Python】Miniconda+Vscode+Jupyter 环境搭建

1.安装 Miniconda Conda 是一个开源的包管理和环境管理系统&#xff0c;可在 Windows、macOS 和 Linux 上运行&#xff0c;它可以快速安装、运行和更新软件包及其依赖项。使用 Conda&#xff0c;我们可以轻松在本地计算机上创建、保存、加载和切换不同的环境 Conda 分为 Anaco…

MyBatis记录

目录 什么是MyBatis MyBatis的优点和缺点 #{}和${}的区别 Mybatis是如何进行分页的&#xff0c;分页插件的原理 Mybatis是如何将sql执行结果封装为目标对象并返回的 MyBatis实现一对一有几种方式 Mybatis设计模式 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个…

【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…

一文全面了解 wxAUI 界面库

目录 wxAUI 简介 框架管理 工具栏 非模态控件 外观和风格 wxAUI 简介 wxAUI 代表高级用户界面 (Advanced User Interface)。 它的目标是为用户提供一个前沿的界面&#xff0c;具有可浮动的窗口和可自定义的布局。最初的 wxAUI 源代码由 Kirix Corp.慷慨地提供&#xff0…

MNN createSession 之创建流水线后端(四)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session::resize 之流水线编码&am…

在openSUSE-Leap-15.5-DVD-x86_64中使用微信wechat-beta-1.0.0.238

在openSUSE-Leap-15.5-DVD-x86_64中使用微信wechat-beta-1.0.0.238 参考文章&#xff1a; 《重磅&#xff01;微信&#xff08;Universal&#xff09;UOS版迎来全新升级丨统信应用商店上新 》统信软件 2024-03-13 17:45 北京 https://mp.weixin.qq.com/s/VSxGSAPTMPH4OGvGSilW…

初探Springboot 参数校验

文章目录 前言Bean Validation注解 实践出真知异常处理 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 前言 工作中我们经常会遇到验证字段是否必填&#xff0c;或者字段的值是否…

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…

轻松解锁微博视频:基于Perl的下载解决方案

引言 随着微博成为中国最受欢迎的社交平台之一&#xff0c;其内容已经变得丰富多彩&#xff0c;特别是视频内容吸引了大量用户的关注。然而&#xff0c;尽管用户对微博上的视频内容感兴趣&#xff0c;但却面临着无法直接下载这些视频的难题。本文旨在介绍一个基于Perl的解决方…

Unity Toggle处理状态变化事件

Toggle处理状态变化事件&#xff0c;有两个方法。 法一、通过Inspector面板设置 实现步骤&#xff1a; 在Inspector面板中找到Toggle组件的"On Value Changed"事件。单击""按钮添加一个新的监听器。拖动一个目标对象到"None (Object)"字段&am…

pytorch单层感知机

目录 1.单层感知机模型2. 推导单层感知机梯度3. 实战 1.单层感知机模型 2. 推导单层感知机梯度 公式前加了一个1/2是为了消除平方2&#xff0c;不加也是可以的&#xff0c;不会改变函数的单调性 3. 实战 初始化1行10列的x和wsigmod中xw.t() w做了转置操作是为了将[1,10]转换…

webpack5零基础入门-12搭建开发服务器

1.目的 每次写完代码都需要手动输入指令才能编译代码&#xff0c;太麻烦了&#xff0c;我们希望一切自动化 2.安装相关包 npm install --save-dev webpack-dev-server 3.添加配置 在webpack.config.js中添加devServer相关配置 /**开发服务器 */devServer: {host: localhos…

[OpenCV学习笔记]获取鼠标处图像的坐标和像素值

目录 1、介绍2、效果展示3、代码实现4、源码展示 1、介绍 实现获取鼠标点击处的图像的坐标和像素值&#xff0c;灰度图显示其灰度值&#xff0c;RGB图显示rgb的值。 OpenCV获取灰度值及彩色像素值的方法&#xff1a; //灰度图像&#xff1a; image.at<uchar>(j, i) //j…

.NET 异步编程(异步方法、异步委托、CancellationToken、WhenAll、yield)

文章目录 异步方法异步委托async方法缺点CancellationTokenWhenAllyield 异步方法 “异步方法”&#xff1a;用async关键字修饰的方法 异步方法的返回值一般是Task<T>&#xff0c;T是真正的返回值类型&#xff0c;Task<int>。惯例&#xff1a;异步方法名字以 Asy…

【保姆级】前端使用node.js基础教程

文章目录 安装和版本管理&#xff1a;npm 命令&#xff08;Node 包管理器&#xff09;&#xff1a;运行 Node.js 脚本&#xff1a;调试和开发工具&#xff1a;其他常用命令&#xff1a;模块管理&#xff1a;包管理&#xff1a;调试工具&#xff1a;异步编程和包管理&#xff1a…

redis和rabbitmq实现延时队列

redis和rabbitmq实现延时队列 延迟队列使用场景Redis中zset实现延时队列Rabbitmq实现延迟队列 延迟队列使用场景 1. 订单超时处理 延迟队列可以用于处理订单超时问题。当用户下单后&#xff0c;将订单信息放入延迟队列&#xff0c;并设置一定的超时时间。如果在超时时间内用户…

数据仓库系列总结

一、数据仓库架构 1、数据仓库的概念 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 数据仓库通常包含多个来源的数据&#xff0c;这些数据按照主题进行组织和存储&#x…
最新文章