首页 > 其他分享 >前端面试题(js)

前端面试题(js)

时间:2023-06-20 15:33:15浏览次数:40  
标签:面试题 浏览器 对象 前端 js 索引 原型 数组 截取

1.this

 解析器在调用函数时,每次会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,根据函数调用方式的不同,函数会指向不同的对象。
 (1)以函数形式调用时,this永远指向window
 (2)以方法的形式调用时,this指向调用方法的对象
 (3)当以构造函数形式调用时,this指向新建的对象

2.创建对象的方法:

(1)使用工厂模式创建
(2)使用构造函数创建
普通函数与构造函数的区别:
(1)普通函数时直接调用,而构造函数需要使用new关键字调用
构造函数执行的流程:
(1)立刻创建一个新的对象
(2)将新建的对象设置为函数中的this,在构造函数中可以通过this引用新建的对象
(3)逐行执行函数中的代码
(4)将新建的对象作为返回值返回
3.原型和原型对象

(1)我们创建的每一个函数,解析器都会向函数中添加一个属性prototype.
(2)这个属性对应一个对象,这个对象就是原型对象
(3)当函数作为普通函数调用时,prototype没有任何作用
(4)当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,可以通过_proto_访问该属性。
(5)原型对象就相当于是一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,可以将对象中共有的属性设置到原型对象中。
(6)当访问对象中的一个属性或方法时,会先在对象自身中寻找,如果有则直接使用,如果没有则去原型对象中寻找,找到则直接使用。
(7)原型对象也是对象,所以它也有原型,当使用一个对象的属性或方法时,会先在自身寻找,自身如果有,则直接使用,自身没有则去原型对象中找,如果原型对象中有,则使用,如果没有,则去原型的原型中找,直到找到object对象的原型,object对象的原型没有原型,如果在object原型中依然没有找到,则返回undefined。

4.数组的常用方法

(1)push,向数组的末尾添加一个或多个元素,并将新数组的长度返回。
(2)pop,删除数组末尾的最后一个元素,并将删除的元素返回。
(3)unshift,向数组的开头添加一个或多个元素,返回新数组的长度。
(4)shift,删除数组开头的第一个元素,并将删除的元素返回。
(5)slice(start,end),从某个已有的数组返回选定的元素。          该方法不会改变原数组,而是将截取的元素封装到新数组中返回。

参数:
<1>start是截取开始的位置的索引,包含开始索引;
<2>end是截取结束位置的索引,不包含结束索引;
<3>第二个参数可以省略不写,此时截取从开始索引往后的所有元素;
<4>索引可以传递一个负值,从后往前计算,-1表示倒数第一个,-2表示倒数第二个。

(6)splice(start,num,...element),用于删除数组中的指定元素。
<1>使用该方法会影响到原数组,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回。
参数:
<1>start表示要删除的开始位置的索引;
<2>num表示要删除的数量;
<3>第三个及以后的参数表示新加入的元素,会插入到开始索引的前面。
(7)contact(),可以连接两个或多个数组,并将新的数组返回,该方法不会影响原数组。
(8)join,该方法可以将数组转化为字符串。该方法不会影响原数组,而是将转换后的字符串作为返回值返回。
参数:
<1>在join中可以指定一个字符串作为参数,该字符串将会作为数组元素的连接符。

5.数组的遍历
(1)用for循环遍历。
(2)用forEach方法遍历。传入一个回调函数,有三个形参,第一个是当前遍历的元素,第二个是当前索引,第三个是所遍历的数组对象。
(3)用map方法遍历。

6.call和apply的区别

(1)call和apply都是函数对象的方法,需要通过函数对象来调用;
(2)当对函数调用call和apply都会调用函数执行;
(3)在调用call和apply时,可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行的this;
(4)call()方法可以将实参在对象之后依次传递;
(5)apply()方法需要将实参封装到一个数组中统一传递。
this的情况:
(1)以函数形式调用时,this永远是window;
(2)以方法的形式调用时,this是调用方法的对象;
(3)以构造函数的形式调用时,this是新建的那个对象;
(4)使用call和apply调用时,this是指定的那个对象。

7.arguments

在调用函数时,浏览器每次都会传递两个隐含的参数:
(1)函数的上下文对象this;
(2)封装实参的对象arguments;
arguments:
(1)arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度;
(2)在调用函数时,所传递的实参都会在arguments中保存;
(3)arguments.length可以用来获取实参的长度;
(4)arguments中有一个属性callee,该属性对应一个函数,即当前正在执行的函数。

注意:即使不定义形参,也可以通过arguments来使用实参,arguments[0]表示第一个实参,arguments[1]表示第二个实参;

8.包装类

(1)包装类类型是针对number,string,boolean三种基本类型来说的,js为我们提供了三个包装类(String,Number,Boolean),通过这三个包装类,可以将基本数据类型的数据转化为对象
(2)包装类产生的时机
基本数据,在调用一些方法时,js会自动生成一个临时的对应的包装类(Number,Boolean,String)的对象,每次产生的对象都不一样。
<1>String:可以将基本数据类型转化为String对象;
<2>Number:可以将基本数据类型转化为Number对象;
<3>Boolean:将将基本数据类型转化为Boolean对象;

9.字符串的相关方法

(1)charAt(index):根据索引获取指定位置的字符,不会影响原数组;

(2)charCodeAt(index):根据索引获取指定位置字符的Unicode编码,不会影响原数组;

(3)contact,用来连接两个或多个字符串,不会影响原数组;
(4)indexOf,用来检索一个字符串中是否包含指定内容,如果字符串中含有该内容,则返回其第一次出现的索引值,如果没有则返回-1;
可以指定第二个参数,用于指定开始查找的位置;
(5)lastIndexOf,该方法和IndexOf一样,区别是lastIndexOf是从后往前找;
 (6)slice(start,end),用于从字符串中截取指定内容,不会影响原字符串,而是将截取到的内容返回。
-参数:
    <1>start是截取开始位置的索引(包含开始位置),
    <2>end是截取结束位置的索引(不包含结束位置),
注意:如果省略第二个参数,则会截取后面所有的,也可以传递一个负数作为第二个参数,负数则从后边开始计算。
(7)subString(start,end),用于截取字符串,和slice类似;
    <1>start是截取开始位置的索引(包含开始位置),
    <2>end是截取结束位置的索引(不包含结束位置),
注意: 不同于slice(),该方法不能传递负数作为参数,如果传递负数,则默认为0,而且它会自动调整参数位置,如果第二个参数小于第一个参数,则自动交换。
(8)subStr(start,num),用于截取字符串,
    -参数:
         start是截取开始的索引,num是截取的长度;
(9)split(str),用于将一个字符串拆分为字符数组,
    -参数:
         需要一个字符串作为参数,将会根据该字符串拆分数组。
(10)toUpperCase(),将字符串转化为大写并返回;
(11)toLowerCase(),将字符串转化为小写并返回;

10.事件冒泡

所谓事件冒泡就是事件的向上传导,当后代元素的事件被触发时,其祖先元素的相同事件也会被触发。在开发中大部分事件冒泡都是有用的,如果要取消事件冒泡,可以通过事件对象的属性event.calcelBubble=true取消。

11.事件的委派

事件委派:指的是将事件统一绑定给元素共同的祖先元素,这样当后代元素的事件触发时,会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。
注意:事件委派是利用了事件冒泡,通过委派可以减少事件绑定的次数,提高程序的性能。

12.事件传播

 

13.BOM对象

BOM
   (1)浏览器对象模型
   (2)BOM可以使我们通过js来操作浏览器对象
   (3)在BOM中为我们提供了一组对象,用来完成对浏览器的操作
   (4)BOM对象
        Window:代表的是整个浏览器的窗口,同时Window也是网页中的全局对象;
        Navigator:代表当前浏览器的信息,通过该对象来识别不同的浏览器;
        Location:代表浏览器的地址栏信息,通过Location可以获取浏览器地址栏信息,或操作浏览器跳转页面;
        History:代表浏览器的历史记录,通过该对象可以操作浏览器的历史记录,由于隐私的原因,该对象不能获取浏览器的具体历史记录,只能操作浏览器向前向后翻页,而且该操作只在当次访问时有效;
        Screen:代表用户的屏幕的信息,通过该对象可以获取到用户的显示器的相关的信息;
 注意:这些对象在浏览器中都是作为Window对象的属性保存的,可以通过Window对象来使用,也可以直接使用。
   


标签:面试题,浏览器,对象,前端,js,索引,原型,数组,截取
From: https://www.cnblogs.com/liqinzhen/p/17493766.html

相关文章

  • Electron打包若依前端为桌面程序
    下面的步骤是我事后整理的,还需要第二个项目进行验证,才能知道是否完整。1.npminstallelectron--save-dev2.npminstallelectron-builder 3.设置图标的:npminstall electron-icon-builder 3.打开env.development文件修改:VUE_APP_BASE_API='线上地址/prod-api'4.在pac......
  • Java面试题集(136-150)
    Java程序员面试题集(136-150)摘要:这一部分主要是数据结构和算法相关的面试题目,虽然只有15道题目,但是包含的信息量还是很大的,很多题目背后的解题思路和算法是非常值得玩味的。136、给出下面的二叉树先序、中序、后序遍历的序列?答:先序序列:ABDEGHCF;中序序列:DBGEHACF;后序序列:DGHEBFCA。补......
  • Java面试题集(131-135)
    131、请对以下JavaEE中的名词进行解释答:容器:容器为JavaEE应用程序组件提供了运行时支持。容器提供了一份从底层JavaEEAPI到应用程序组件的联合视图。JavaEE应用程序组件不能直接地与其它JavaEE应用程序组件交互。它们通过容器的协议和方法来达成它们之间以及它们与平台服......
  • Java面试题集(116-135)
    Java程序员面试题集(116-135)摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用。不管你的Web开发中是否使用框架,JSP和Servlet都是一个必备的基础,在面试的时候被问到的概率还是很高的。116、说出Servl......
  • 【HarmonyOS】如何解决智能穿戴设备中swiper组件右滑与系统退出应用冲突问题(API6 JS)
    【关键字】API6、JS、swiper组件、智能穿戴、setSwipeToDismiss【问题描述】使用API6JS开发智能穿戴设备HarmonyOS应用,在首页使用swiper组件时,右滑swiper时会退出应用,无法实现swiper右滑效果,效果如下所示:【问题分析与原因】当页面栈只有一个页面时,默认滑动事件分发会让应用退出,而......
  • js base64编解码
     在JavaScript中,有两个原生支持的函数被分别用来处理解码和编码Base64字符串:btoa():“btoa”应读作“binarytoASCII”,atob():“atob”应读作“ASCIItobinary” varstr='eyJjb2RlIjoyMDAsIm1lc3NhZ2UiOiJPSyJ9'//base64字符串/ASCII字符vardata=atob(st......
  • Servlet&JSP思维导图
    ......
  • 前端学习笔记_思维导图和资源链接
    17素材资源jQueryapi中文文档脑图-前端总结脑图-jquery总结脑图-js正则总结后台主题框架echartsjQuery插件adminlte......
  • 一道SQL面试题(行列互换)
    有一个SQL题在面试中出现的概率极高,最近有学生出去面试仍然会遇到这样的题目,在这里跟大家分享一下。题目:数据库中有一张如下所示的表,表名为sales。年季度销售量19911111991212199131319914141992121199222219923231992424要求:写一个SQL语句查询出如下所示的结果。年一季度二季度三......
  • 图书馆管理系统代码源码(php+css+js+mysql) 完整的代码源码,系统使用B/S架构。
    图书馆管理系统代码源码(php+css+js+mysql)完整的代码源码,系统使用B/S架构。优化过的界面,拥有管理员和普通用户,普通用户可注册登录,管理员可登录,功能齐全。管理员可管理普通用户,增加其他管理员,增添图书,借还书操作,查看已还书。普通用户,可在线查看现有图书,和自己已借图书。推荐使用php......