【面试 · 二】JS个别重点整理

目录

数组方法

字符串方法

遍历

es6

构造函数及原型 原型链

this指向 修改

vue事件循环Event Loop

FormData

数组方法

  • 改变原数组:push、pop、shift、unshift、sort、splice、reverse
  • 不改变原属组:concat、join、map、forEach、filter、slice
1、push( ):末尾追加 返回值是添加数据后数组的新长度
2、pop( ):末尾删除一个元素 返回被删除掉的元素
3、shift( ):从头部删除一个元素 返回被删除掉的元素
4、unshift( ):向数组的开头添加 返回值是添加数据后数组的新长度
5、sort( ):排序 返回的是从新排序的原数组
6、splice(index,len,[item]):index:开始下标 len: 替换/删除的长度 item:替换的值,删除item为空
7、reverse( ): 原数组倒序 返回值是倒序之后的原数组
1、concat( ):数组合并
2、join( ):讲数组进行分割成为字符串  这能分割一层在套一层就分隔不了了
3、map( ):没有return时,对数组的遍历。有return时,返回一个新数组(经过过滤)
4、forEach( ):遍历
5、filter( ):会返回过滤后的数组
6、slice(start,end):截取

字符串方法

1、chartAt( ):返回在指定位置的字符;
2、concat( ):返回新的字符串**,将一个或多个字符串与原字符串连接合并
3、indexOf( ):检索字符串,返回第一次出现的索引,没有出现则为-1
4、lastIndexOf(searchValue[ fromIndex]) 返回从字符串尾部开始第一次出现的索引,没有则-1,fromIndex的值相对于从尾部开始的索引
5、split( ):返回一个以指定分隔符出现位置分隔而成的一个数组,数组元素不包含分隔符
6、substr( ):从起始索引号提取字符串中指定数目的字符;
7、substring( ):提取字符串中两个指定的索引号之间的字符;
8、toLowerCase( ):字符串转小写;
9、toUpperCase( ):字符串转大写;
10、valueOf( ):返回某个字符串对象的原始值; 
11、trim( ):删除字符串两边的空格;
12、trimeState 取出开始的空格
13、trimeEnd  去除末尾空格
14、includes(searchString[, position])返回boolean,判断一个字符串是否包含在另一个字符串中,从postition索引开始搜寻,默认0
15、slice( ):提取字符串片段,并在新的字符串中返回被提取的部分;
16、search(regexp)返回首次匹配到的索引,没有则-1,执行正则表达式和 String 对象之间的一个搜索匹配
17、toString()返回一个表示调用对象的字符串,该方法返回指定对象的字符串形式
18、trim()返回去掉两端空白后的新字符串 还有trimend trimstart
19、replace() 把指定的字符串替换成为别的字符

浅拷贝 深拷贝

浅:object.assign()对象合并、slice()字符串截取、concat()数组/字符串合并、扩展运算符...

深:json.parse(ison.stringify(obj))

遍历

遍历汇总

map filter reduce

es6

es6重点 汇总

去重

es6新增的数组方法

构造函数及原型 原型链

构造函数和原型

this指向 修改

obj.sayHello.call(obj1, '设计师', '画画');
obj.sayHello.apply(obj1, ['设计师', '画画']);//只有两个参数 第二个为数组
obj.sayHello.bind(obj1, '设计师', '画画'); // 无输出结果 
obj.sayHello.bind(obj1, '设计师', '画画')(); // bind需调用

vue事件循环Event Loop

eventLoop详解

微任务包括:Promise async/await …

宏任务包括:如定时器回调、UI 渲染...

promise

promise详解  三种状态:pending(进行中)、fulfilled(成功)和rejected(失败)

FormData

FormData详解

面试题

递归应用

js递归遍历树形结构 

let arr = [
            {
                name:"总费用",
                money:"1000",
                tier:1,
                children:[
                    {
                        name:"伙食",
                        money:"500",
                        children:[
                            {name:"早餐",money:"100"},
                            {name:"午餐",money:"200"},
                            {name:"晚餐",money:"200"}
                        ]
                    },
                    {
                        name:"住宿",
                        money:"500",
                        children:[
                            {name:"第一晚",money:"100"},
                            {name:"第二晚",money:"200"},
                        ]
                    },
                ],
            }
        ]

 deep(arr)
// 递归循环children加层级tier
 function deep(val) {
  val.forEach((item) => {
    item.children = item.children && item.children.length > 0 ? item.children : undefined
    if (item.children && item.children.length > 0) {
         item.children.forEach((e) => {
              e.tier = item.tier + 1
           })
           deep(item.children)  // 函数内部调用函数  传递子层级
       }
    })
   return true
 }

打平树结构数据

// 把树结构数据打平为一维数组
const flatTree = (treeData) => {
  let result = []
  treeData.forEach((item) => {
    // 先克隆一份数据作为第一层级的填充
    let res = JSON.parse(JSON.stringify(item))
    delete res.children
    result.push(res)
    if (item.children && item.children.length > 0) {
      // 如果当前children为数组并且长度大于0,才可进入flatTree()方法
      result = result.concat(flatTree(item.children))
    }
  })
  return result
}

阶乘

  // 阶乘函数定义
            function factorial(num) {
                if (num === 1) {
                    return 1;
                } else {
                    return num * factorial(num - 1)
                }
            }

你可能感兴趣的:(js,前端,vue,javascript,前端,开发语言,vue)