一.js数据类型有哪些
基本数据类型:
Number(数字类型型,包括数值和非数值NaN)
String(字符串)
Boolean(布尔型)
Undefined(未定义)
Null(空型)
引用数据类型:
数组、函数、对象、set、map
二、内置对象有哪些
Math对象:数学和函数相关的
Date对象:处理日期和时间
Array对象:数组对象
String对象:字符串对象
三、数组方法有哪些
1、unshift------添加元素,在数组最前边添加,返回数组的长度
2、shift------删除元素,在数组最前边删除,返回删除的元素
3、reverse------翻转数组,返回一个数组,改变原来的数组
4、sort------排序,默认从大到小排序,改变原来的数组
5、concat------拼接,返回新数组,原数组不变
6、slice(start,end)------截取,从索引start开始截取,到end结束,包括start不包括end,原数组不变
7、splice(start,length)------截取,从索引start截取length个元素,原数组改变
splice(start,length,item)-------替换,从索引start删除length个元素,并将item添加到该位置
8、indexOf------查询某元素的索引,从前往后查找第一次出现的索引,没有返回-1
9、lastIndexOf------查询某元素的索引,从后往前查找第一次出现的索引,没有返回-1
10、join------转化,通过指定分隔符连接数组所有元素,返回字符串,默认用逗号分隔
11、forEach------遍历数组
12、some-----判断元素是否满足条件,有一个满足就返回true,都不满足返回false
13、every-----判断元素是否满足条件,都满足就返回true,有一个不满足返回false
14、map-----用于数学计算,返回数组
15、filter------过滤元素,过滤出符合条件的元素,返回数组
四、数组去重几种方式
1、双重for循环
2、indexOf()方法
3、splice()
4、filter()
5、利用对象属性不能重复的特点
6、利用Set结构成员不能重复的特点
7、利用Map的has(key)
五、数组深拷贝几种方式
1、for循环
2、slice方法
3、concat方法
4、扩展运算符
六、对象深拷贝几种方式
1、for…in…循环
2、利用JSON,先转JSON字符串在转JSON对象
3、扩展运算符
4、Es6中的Object.assign方法
七、定时器有几种,有什么区别
1、setTimeout 隔一段时间之后执行,只执行一次
2、setInterval 每个一段时间之后执行一次
区别:
setTimeout 只执行一次, setInterval 执行多次
setTimeout用clearTimeout清除,setInterval用clearInterval清除
八、对Promise的理解
每次请求都依赖上一次请求返回的数据来作为参数,然后继续发出请求,层层嵌套,会形成回调地狱。Promise可以解决回调地狱也可以解决请求异步问题。
promise对象在创建实例的时候需要用new Promise(),参数是一个回调函数,该回调函数有两个参数resolve和reject。resolve是成功后的回调函数,reject是失败后的回调函数。
Promise对象有三种状态:
1、pendding:表示初始状态;
2、fulfilled:resolve方法调用的时候,表示操作成功;
3、rejected:reject方法调用的时候,表示操作失败;
状态只能从pendding---->fulfilled或者pendding---->rejected,不能逆向转换
调用promise对象
1、promise实例化对象.then(function(res){});
成功执行then方法,第一个then方法的res是resolve的参数,之后的then方法 中的res是上一个then方法的返回值
2、promise实例化对象.catch(function(err){});
成功执行catch方法,err是reject的参数
九、对模块导入导出的理解
为解决大型系统的javascript文件经常存在复杂的依赖关系,后期的维护成本会越来越高的问题产生了模块化
导出:选择性地给其他模块暴露(提供)自己的属性和方法,供其他模块使用。
导入:可以根据需要,引入其他模块的提供的属性或者方法,供自己模块使用。
批量导出:export {name.age} 导入import {name.age} from “url”;
整体导入: import * as obj from “url” 变量作为obj的属性
重命名导出的变量:import {旧名字 as 新名字} from “url”;
默认导出:export default 变量 (导出没有名字的变量,只能有一个)
在导入时import 自定义名 from”url”; 自定义名字不用大括号包住
十、箭头函数和普通函数的区别
1、箭头函数更简洁,不需要function,需要在()后加=> 如果只有一个参数可以省略(),如果函数只有一个return语句,可以省略return 和 {}
2、箭头函数都是匿名函数,普通函数有匿名函数和具名函数
3、箭头函数没有argument对象,普通函数调用后会有argument对象
4、箭头函数不能作为构造函数,没有原型prototype属性,普通函数可以作为构造函数创建对象实例
5、箭头函数的this永远指向父作用域,可以用call和apply调用但是this指向不改变。普通函数的this指向可以通过call和apply改变。
十一、数组排序的几种写法
1、利用sort()方法排序
2、选择排序法:每次找到剩余的最大的或者最小的
3、冒泡排序法:每次比较两个相邻的数,一次循环能确定一个最大值或者最小值
4、插入排序法:选定第一个元素,一次扫描后面的元素,放到合适位置