js面试题整理——更新ing
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相关推荐
- Vue.js面试题整理
一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI ...
- Redis 知识点和面试题(持续更新ing)
推荐 书籍 <Redis实战>,<Redis设计与实现>,<Redis使用手册> 视频 [[趣话Redis第二弹]Redis数据持久化AOF和RDB原理一次搞懂!- ...
- 一些常用的命令整理(更新ing~)
1.查询Eigen3版本 pkg-config --modversion eigen3 2.查询opencv版本号 pkg-config --modversion opencv 3.解tar.gz压缩 ...
- js中text方法是啥意识_一盏茶的时间,快速捕获JS中常用的方法(细心整理,持续更新ing)...
不知不觉上班一周辽-趁着大好周末,小编挣扎着从床上爬起来,决定对前端日常编程中常用到的一些方法做一个系统的整合. 有些人或许会觉得忘了百度就完事儿,no no no!这事儿小编真的亲践过好多次,百度一 ...
- 2022年前端面试题整理,持续更新中
端面试题整理 已同步到掘金.CSDN 掘金地址: https://juejin.cn/post/7075332630417244173 CSDN 地址:https://blog.csdn.net/z1 ...
- 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)
对于做前端的朋友,或者做了前端几年了,基础不好的,或者想进大厂的想了解深入,下面的知识点很多前端朋友都没有深入了解.很重要,看完有种茅塞顿开感觉,**关注+收藏哦,总有一天用的得.** 涉及到知识点: ...
- 长期维护更新,前端面试题整理
网上找到的各种面试题整理,长期更新.大部分答案整理来自网络,有问题的地方,希望大家能指出,及时修改;技术更新迭代,也会及时更新 博客原地址: https://finget.github.io/2019 ...
- 最新前端面试题整理和答案(全)一直更新
最新前端面试题整理和答案(全) 参考地址:https://blog.csdn.net/wdlhao/article/details/79079660 javascript: JavaScript中如何 ...
- TS 常见问题整理(60多个,持续更新ing)
TS 常见问题整理(60多个,持续更新ing) https://cloud.tencent.com/developer/article/1593335
最新文章
- vs发布免安装文件_戒掉PC,免pc开发,cloud ide and debug设想
- 安卓开发小知识 - 3
- malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!...
- URL编码表%20Base64编码表%20HTTP消息含义
- ai一个线段多个箭头_AI设计教程:艺术笔制作渐变线条海报的方法是什么
- java系统界面找不到符号,找不到符号,java找不到符号
- oracle 基于备份 duplicate 没有目标连接,RMAN 概述及其体系结构
- 多语言应用开发中本地化信息对照表
- 【Qt】Qt之进程间通信(Windows消息)【转】
- 正则表达式的匹配规则
- 分库分表解决方案之MyCat
- C/C++学习路线(总体把握C/C++)
- JavaScript 语言精粹 高清PDF中文版
- PS抠图工具Topaz ReMask中文汉化(win/mac版,含教程)
- linux驱动系列学习之DRM(十)
- linux pv修改大小,Linux下扩容系统容量和删除unknown PV
- mysql replicator_聊聊rocketmq-mysql的Replicator
- ACRush 楼天城 回忆录
- 用unionID作为oneID的实质:不管理账号和密码
- 产品30讲之产品周期
热门文章
- 计算机图形技术与CAD,《计算机图形学与CAD技术》考试参考资料.docx
- BLDC无刷直流电机仿真设计simulink 转速电流双闭环 调速系统 matlab simulink仿真
- API转载 沙盘命令行API
- blibli弹幕采集(爬取庆余年弹幕)
- MySQL 主键性能解析
- Dockerfile中CMD和ENTRYPOINT区别
- Service中启动Activity我们这边Settings是直接在程序里添加的
- 三网合一短信平台企业自己可以弄吗?三网合一短信是否可以统一显示号码
- 根据年龄分割查询每个年龄段的人数
- Qt5.7关于Quazip的编译和使用