JS面试题

一、JS的数据类型

js的数据类型分为基本数据类型和引用数据类型

基本数据类型:String、Number、Null、Undefined、Boolean、Symbol

引用数据类型:Object、Array、Function

二、var、let与const的区别?

1、var声明变量可以先使用后声明,存在变量提升(浏览器解析时会自动把声明提升到使用前面)。let必须先声明再使用,const定义常量时必须初始化。

2、const定义的常量,不能再次声明也不能修改。var和let定义的变量可以被修改。

三、JS中创建数组的三种方法

    // 以下是第一种var arr1 = new Array();arr1[0] = "jOne";arr1[1] = "michle";arr1[2] = "heool";console.log(arr1)// ["jOne", "michle", "heool"]// 以下是第二种,数组里的元素可以是对象,也可以是number、string、Booleanvar arr2 = new Array("123",234,[111,333],true);console.log("第二种",arr2);// ["123", 234, Array(2), true]// 以下是第三种,最常用的一种var arr3 = ["111",222,false,{id:1,val:"你好"}];console.log("第三种",arr3);//["111", 222, false, {id:1,val:"你好"}]

变量也可以被修改,访问

 arr3[1] = "333";console.log("修改后的arr3",arr3);

四、可以为JavaScript对象添加新的属性或者方法

  //给javascript对象添加一个方法Array.prototype.myfunction = function () {for(var i = 0;i < this.length; i++ ){this[i] = this[i].toUpperCase();}} arr3.myfunction();//调用方法console.log("111arr3",arr3);//["DFS", "FFDS", "JHGF"]Array.prototype.newElem = "she";//添加新属性,实例对象都可以访问console.log(arr3.newElem);//访问新属性:sheconsole.log("22",arr2.newElem);//访问新属性:she

五、Javascript对象方法

参考文档:https://www.runoob.com/jsref/jsref-obj-array.html

1、concat(),连接/合并 两个和多个数组,并返回结果。此方法不会改变原有数组,仅返回被连接数组的副本

语法:array1.concat(array2,array3,...,arrayX)

2、every(),用于检测数组里的每一个元素是否都满足条件(检测条件用函数提供),不会改变原数组

当数组的每一个元素都满足条件才返回true,有一个不满足条件就返回false,且当前面的元素已经检测出不满足条件,后面的元素便不会被检测

   // 使用every检测数组里的每一个值是否都大于5var arr4 = [3,4,5,6,7];var result = arr4.every(item =>{return item >5;})console.log(result);//false

3、some(),用于检测数组中的元素是否满足指定条件(函数提供)。不会改变原数组

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。
   var rest = arr4.some(item =>{return item < 4;})console.log(rest);//true

4、filter(),检测数值元素,并返回符合条件所有元素的数组创建了一个新数组,不会改变原数组。

    var newArray = arr4.filter(item =>{return item > 5;})console.log(newArray);// [6, 7]

5、find(),返回满足条件的数组的第一个元素的值,之后的值不会再调用执行函数。不会改变原数组。

    var findRes = arr4.find(item =>{return item > 5;})console.log(findRes);// 6

6、forEach(),本质上等同于for循环,数组里的每一个元素都会执行该函数,不会返回有意义的值,总是undefined。会改变原数组。

     arr4.forEach((item,index) =>{ arr4[index] = item*item;}) console.log(arr4);//[9,16,25,36,49]

6、map(),通过指定函数处理数组的每个元素,并返回处理后的数组。不会改变原数组。

    var arr5 = [2,4,6,8,10];let mapArr = arr5.map((item,index) =>{ return item / 2;}) console.log(mapArr);//[1,2,3,4,5]console.log(arr5 );//[2,4,6,8,10]

8、join(),用于把数组里的所有元素转化为一个字符串,元素是通过指定的分隔符进行分隔的。

语法:array.join(separator),如果省略该参数,则使用逗号作为分隔符。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(" and ");
console.log(energy) // Banana and Orange and Apple and Mango

 toString(),把数组转换为字符串

    var fruits = ["Banana", "Orange", "Apple", "Mango"];var str = fruits.toString()//Banana,Orange,Apple,Mango

9、findIndex(),返回传入一个测试条件(函数)符合条件的数组第一个元素位置。

例子:当数组里的元素都是对象,且每个对象都有id,如何查找到某一个对象的位置。

  var objs = [{id:0,name:"jack"},{id:1,name:"summer"},{id:2,name:"Machle"}];var position = objs.findIndex((item,index) =>{return item.name == "summer"})console.log(position) //1

10、reduce(),法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。(数组中的元素也会遍历)

语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

total 必需。初始值, 或者计算结束后的返回值。

两个参数(要执行的函数,初始值),函数必需,初始值是可选的

应用:求和、求乘、数组元素去重、计算数组中每个元素出现的次数等

//没有设置初始值,实现求和var numbs = [5,7,3,8,10,11];var res = numbs.reduce((sum,item) => {console.log(sum,item);return sum+item;})console.log(res);
//  5 7
//  12 3
//  15 8
//  23 10
//  33 11
//  44// 设置了初始值,实现求和var numbs = [5,7,3,8,10,11];var res = numbs.reduce((sum,item) => {console.log(sum,item);return sum+item;},4)console.log(res);
//  4 5
//  9 7
//  16 3
//  19 8
//  27 10
//  37 11
//  48

11、pop()、shift()。

pop():删除数组的最后一个元素,并返回被删除的元素。

shift():  删除数组的第一个元素,并返回被删除的元素。

12、push、unshift

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

13、判断变量是不是数组的方法

(1)instanceof判断:

var arr1 = [1,2,3,4]
console.log("instanceof方法可以判断变量是否是数组",arr1 instanceof Array);//true

(2)Array.isArray()判断:

 console.log("Array.isArray()方法可以判断变量是否是数组",Array.isArray(arr1));//true

(3)对象的constructor属性,可以返回对象对应的构造函数

 console.log("变量的constructor属性可以判断变量是否是数组",arr1.constructor == Array);//true

js面试题整理——更新ing相关推荐

  1. Vue.js面试题整理

    一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI ...

  2. Redis 知识点和面试题(持续更新ing)

    推荐 书籍 <Redis实战>,<Redis设计与实现>,<Redis使用手册> 视频 [[趣话Redis第二弹]Redis数据持久化AOF和RDB原理一次搞懂!- ...

  3. 一些常用的命令整理(更新ing~)

    1.查询Eigen3版本 pkg-config --modversion eigen3 2.查询opencv版本号 pkg-config --modversion opencv 3.解tar.gz压缩 ...

  4. js中text方法是啥意识_一盏茶的时间,快速捕获JS中常用的方法(细心整理,持续更新ing)...

    不知不觉上班一周辽-趁着大好周末,小编挣扎着从床上爬起来,决定对前端日常编程中常用到的一些方法做一个系统的整合. 有些人或许会觉得忘了百度就完事儿,no no no!这事儿小编真的亲践过好多次,百度一 ...

  5. 2022年前端面试题整理,持续更新中

    端面试题整理 已同步到掘金.CSDN 掘金地址: https://juejin.cn/post/7075332630417244173 CSDN 地址:https://blog.csdn.net/z1 ...

  6. 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)

    对于做前端的朋友,或者做了前端几年了,基础不好的,或者想进大厂的想了解深入,下面的知识点很多前端朋友都没有深入了解.很重要,看完有种茅塞顿开感觉,**关注+收藏哦,总有一天用的得.** 涉及到知识点: ...

  7. 长期维护更新,前端面试题整理

    网上找到的各种面试题整理,长期更新.大部分答案整理来自网络,有问题的地方,希望大家能指出,及时修改;技术更新迭代,也会及时更新 博客原地址: https://finget.github.io/2019 ...

  8. 最新前端面试题整理和答案(全)一直更新

    最新前端面试题整理和答案(全) 参考地址:https://blog.csdn.net/wdlhao/article/details/79079660 javascript: JavaScript中如何 ...

  9. TS 常见问题整理(60多个,持续更新ing)

    TS 常见问题整理(60多个,持续更新ing) https://cloud.tencent.com/developer/article/1593335

最新文章

  1. vs发布免安装文件_戒掉PC,免pc开发,cloud ide and debug设想
  2. 安卓开发小知识 - 3
  3. malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!...
  4. URL编码表%20Base64编码表%20HTTP消息含义
  5. ai一个线段多个箭头_AI设计教程:艺术笔制作渐变线条海报的方法是什么
  6. java系统界面找不到符号,找不到符号,java找不到符号
  7. oracle 基于备份 duplicate 没有目标连接,RMAN 概述及其体系结构
  8. 多语言应用开发中本地化信息对照表
  9. 【Qt】Qt之进程间通信(Windows消息)【转】
  10. 正则表达式的匹配规则
  11. 分库分表解决方案之MyCat
  12. C/C++学习路线(总体把握C/C++)
  13. JavaScript 语言精粹 高清PDF中文版
  14. PS抠图工具Topaz ReMask中文汉化(win/mac版,含教程)
  15. linux驱动系列学习之DRM(十)
  16. linux pv修改大小,Linux下扩容系统容量和删除unknown PV
  17. mysql replicator_聊聊rocketmq-mysql的Replicator
  18. ACRush 楼天城 回忆录
  19. 用unionID作为oneID的实质:不管理账号和密码
  20. 产品30讲之产品周期

热门文章

  1. 计算机图形技术与CAD,《计算机图形学与CAD技术》考试参考资料.docx
  2. BLDC无刷直流电机仿真设计simulink 转速电流双闭环 调速系统 matlab simulink仿真
  3. API转载 沙盘命令行API
  4. blibli弹幕采集(爬取庆余年弹幕)
  5. MySQL 主键性能解析
  6. Dockerfile中CMD和ENTRYPOINT区别
  7. Service中启动Activity我们这边Settings是直接在程序里添加的
  8. 三网合一短信平台企业自己可以弄吗?三网合一短信是否可以统一显示号码
  9. 根据年龄分割查询每个年龄段的人数
  10. Qt5.7关于Quazip的编译和使用