前端面试常见问题

目录

常见问题:

1.数组常用方法

2.原生js

3.ajax( Asynchronous JavaScript And XML)

4.promise异步

promise封装ajax

5.跨域

url的组成

跨域解释

解决跨域问题

6.面向对象

7.vue基本

8.vue生命周期

9.组件传值

10.Element-ui的常见组件

11.route和router

12.Axios

13.工作中遇到的难题&解决方法

1.vue优点?

2.为什么使用key?

3.vue组件中data为什么必须是一个函数?

4.Vue中双向数据绑定是如何实现的?

5.axios

6.params和query的区别

7.vue初始化页面闪动问题

8.什么是 vue 生命周期?有什么作用?

9.简述每个周期具体适合哪些场景

10.请详细说下你对vue生命周期的理解?

11. `$route` 和 `$router` 的区别

12.vue-router的两种模式

13.vuex是什么?怎么使用?哪种功能场景使用它?

vuex状态管理

14.vuex有哪几种属性?

15.v-show 与 v-if 有什么区别?

16.Vue 组件间通信有哪几种方式?

17.你使用过 Vuex 吗?

18.你有对 Vue 项目进行哪些优化?

19.this指向问题

20.什么是跨域?跨域请求资源的方法有哪些?

1、什么是跨域?

2、跨域请求资源的方法:

21.常见兼容性问题?

22.CSS 优化、提高性能的方法有哪些?

23. JavaScript 原型,原型链 ? 有什么特点?

24.虚拟DOm

25.组件的数据通信

26. vue基本指令?

27.Promise

28.react生命周期

29.React项目流程

30.react刷新视图

31.ajax


常见问题:

1.数组常用方法

index→使用索引访问数组元素→arr[index]

split()→字符串转数组→string.split(‘分隔符’)

split /splɪt/ vt. 分离;使分离

toString()→数组转换为字符串(逗号,连接)→arr.toString()→string

join()→数组转换为字符串(自定义分隔符)→arr.join(‘分隔符’)→string

join  /dʒɔɪn/ vt. 参加;结合;连接

pop()→删除数组最后一个元素→arr.pop()

pop /pɑːp/ 弹出

push()→数组末尾添加元素→arr.push()

push /pʊʃ/ 推入

shift()→删除并return首个元素→arr.shift()

shift /ʃɪft/ 移位

unshift()→头部添加元素并return新数组 length→arr.unshift(元素)

delete→js中数组为对象,可用js中delete运算符操作,但只删除内容,其索引及路径保留,一般用shift和pop代替→delete arr[index]

splice()→增删元素return新数组,index(操作位置),num(删除元素数量),item(当前位置添加的元素)→arr.splice(index,num,item1,item2,…)

splice  /splaɪs/ v. 捻接(绳子);拼接,接合(胶片等);移接(基因)

slice()→当只有一个数字参数时,从该索引开始到结尾,return新数组,不改变原数组,当有2个数字参数时,从[n1,n2)索引返回新数组

slice /slaɪs/ vt. 切下;把…分成部分;

concat()→合并数组,不会改变当前数组,return新数组,合并内容也可以是元素,不限数目→arr1.concat(arr2,arr3,…,item1,item2,…)

reverse()→倒序数组

reverse  /rɪˈvɜːrs/ v. 颠倒;反转;

sort()→以字符串标准, 以字符表顺序对数组排序(如2在11前),修正数字排序:

arr.sort(function(a, b){return a - b});//升序

比较函数的目的是定义另一种排列顺序。

比较函数应该返回一个负,零或正值,这取决于参数:

function(a, b){return a-b}

当 sort() 函数比较两个值时,会将值发送到比较函数,并根据所返回的值(负、零或正值)对这些值进行排序。默认比较字符编码号

随机数排序: arr.sort(function(a, b){return 0.5 - Math.random()});

sort  /sɔːrt/  n. [计](资料、数据的)分类,排序

filter((item,index,array)=>{return 过滤代码})→不改变原数组

Math.max.apply()→求最大值→Math.max.apply(null,[1,2,3])

Math.min.apply()→求最小值→同上

apply /əˈplaɪ/ vt. 申请;应用;请求

let arr=[1,2,3,4,5,12,'111']

// console.log(arr.toString())

// 包括逗号转字符串

// console.log(arr.join())

// 转字符串 默认参数','

// console.log(arr.pop());

// 删除并返回最后一个元素,

// console.log(arr.push(6,1));

// 末尾添加元素 并返回新长度

// console.log(arr.shift());

// 删除并返回第一个元素

// console.log(arr.unshift(1,2,"4"));

// 首位添加元素并返回新长度

// console.log(arr.splice(0,2,'222'))

// arr.splice(index,n,item1,item2)

// index位置操作 ,删除n,添加item

// 返回删除内容组成的数组

//console.log(arr.slice(2,4));

//console.log(arr.slice());//第一个默认0(包括),第二个默认length(不包括)

// 截取索引返回新数组  不影响原数组

// console.log(arr.reverse())

// 原数组倒序

// console.log(arr.sort())

// 将原数组按字符表排序 相等的按原顺序

// console.log(arr.sort((a,b)=>{return a-b}))

// 按数字大小升序 纯数字字符串转为数字

// console.log(Math.max.apply(null,arr));

// 求最大值 纯数字字符串转number null''其他会NaN

// let a=[2,3]

// let obj={num:1,id:44}

// console.log(arr.concat(a).concat([88,66]).concat(obj).concat('文字'))

// 拼接新数组 参数数组时其元素拼接 其他参数直接作为元素拼进去

console.log(arr);

2.原生js

获取节点:

document.body //直接获取 包括head,title

document.getElementById('id');

document.getElementsByClassName('class');//array

document.getElementsByTagName('标签名');//array

document.querySelector('选择器') ;

document.querySelectorAll('选择器')//array

节点操作:

createElement()→创建节点→document.createElement(“标签名”)

create /kriˈeɪt/ vt. 创造,创作

createTextNode(‘string’)→创建文本节点

appendChild()→末尾添加节点→父节点.appendChild(子节点)

append  /əˈpend/ vt. 附加;贴上

removeChild()→删除节点→父节点.removeChild(子节点)

replaceChild()→替换节点→父节点.replaceChild(新节点,旧节点)

replaceChildren()→用新节点替换全部子内容

replace /rɪˈpleɪs/ vt. 取代,代替;替换,更换

cloneNode()→克隆节点(包括子节点)

element.innerHTML→改变内部html结构

element.innerText→改变内部文本内容

element.属性名→改变属性值

element.setAttribute(“属性”,”值”)→改变属性值

attribute /əˈtrɪbjuːt/ n. 属性;特质

element.style.属性名→改变style

element.childNodes→标准方式获取子节点数组,包括换行符和空格,不常用

node /noʊd/ n. 节点

element.children→子元素数组

firstElementChild→第一个子节点

lastElementChild→最后一个子节点

childElementCount→子节点个数

previousElementSibling→兄节点

previous /ˈpriːviəs/ adj. 以前的;早先的;过早的

sibling /ˈsɪblɪŋ/ n. 兄弟姊妹

nextElementSibling→弟节点

常见事件:    

onmousedown

按下

onmouseup

松开

onmouseover

移入

onmouseout

移出

onclick

单击

ondblclick

双击

onload

加载完

onfocus

获取焦点时

onresize

改变视口触发

onchange

值改变事件

keydown

键盘按下事件

keyup

键盘松开事件

addEventListener()→添加事件监听→element.addEventListener(事件名(无on),fn,Boolean)→第三个参数布尔值可略,默认true冒泡/false捕获(ie8以前写法: attachEvent)

element.on事件=()=>{}→设置事件

removeEventListener→删除事件监听

3.ajax( Asynchronous JavaScript And XML)

        1.发送请求

const xhr=new XMLHttpRequest();

// const xhr=ActiveXObject("Microsoft.XMLHTTP");//判断window.XMLHttpRequest是否为空 ie5ie6适用该方法

        2.发送请求

open(method,url,async)

method→提交方式:”GET(获取)”、”POST(获取)”、”PUT(修改)”、”DELETE(删除)”、” patch(不常见)

url→服务器(文件)路径

async→默认true异步/false同步

       send()发送请求,用于get

       send(string)→发送请求,用于post

xhr.open("GET",路径,布尔);

xhr,send();

       如果post发送请求需要在send()前添加请求头

xhr.open("POST",路径,true);

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")

xhr.send("属性=&属性2=2")

open  /ˈoʊpən/ vi. 开始;展现

send /send/ vt. 发送,寄

encoded /ɪnˈkoʊdɪd/ v.把……编码

        3.判断返回值 

       onreadystatechange→储存函数,每当readyState属性改变时,调用该函数

       readyState→存有XMLHttpRequst的状态

              0: 请求未初始化

              1: 服务器连接已建立

              2: 请求已接收

              3: 请求处理中

              4: 请求已完成,响应已就绪

       status→状态码,200~300为成功

xhr.onreadystatechange=function(){

    if(this.readyState==4&&this.status>=200&&this.status<300){

        // 成功时执行代码

    }

}

content /ˈkɑːntent; kənˈtent/ n. 内容,目录;满足;容量

application /ˌæplɪˈkeɪʃn/ n. 应用;申请

state /steɪt/ vt. 规定;声明;陈述

status /ˈsteɪtəs/  n. 地位;状态;情形

4.promise异步

new一个promise对象,第一个属性为回调函数,分别传成功和失败的参数(function),第二个属性为异步时间(ms).一般放在另一个函数内

function fn(){

    return new Promise(function(success,err){

        setTimeout(function(){

            let rst=JSON.parse(xhr.response)

            success(rst)

        },2000)

    })

}

parse /pɑːrs/ vt. 解析

response  /rɪˈspɑːns/ n. 响应;反应;回答

parse→json转字符串

JSON.stringify() 方法用于将 JavaScript (数组,对象)转换为 JSON 字符串。

则fn函数后可接任意数目then中参数为function,会调用成功态的传递数据,实例即为字符串”数据”

fn().then(function(data){

    console.log(data)//在异步时间即2000ms后获取数据并执行

})

promise封装ajax

function ajax(method,url,data){

    // 函数返回的是一个promise对象

    return new Promise((success,error)=>{

        // 返回正确状态时回调success

        // 返回异常时回调error

        const xhr=new XMLHttpRequest();

        xhr.open(method,url);

        if(method=="post"){

            // post

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤卓杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值