工作中容易出错的内容

  1. 下面有关HTML的Doctype和严格模式与混杂模式的描述

<!DOCTYPE> 声明位于文档中的最前面,处于<html>标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档

在标准模式中,浏览器根据规范呈现页面;在混杂模式中,页面以一种比较宽松的向后兼容的方式显示

浏览器根据DOCTYPE是否存在以及使用的哪种DTD来选择要使用的呈现方法

DOCTYPE不存在或格式不正确会导致文档以兼容模式 呈现

2.下面这段代码输出什么

function Foo() {

    var i = 0;

    return function() {

        console.log(i++);

    }

}

var f1 = Foo(),

    f2 = Foo();

f1();

f1();

f2();

答案:010

3.浏览器中使用js跨域获取数据

js可以使用jsonp进行跨域

通过修改document.domain来跨子域

使用window.name来进行跨域

4.Flash和js通过什么类如何交互

ExternalInterface

5.jQuery ajax中都支持哪些数据类型

xml/html/jsonp/json/script/text

7.在js里判断一个对象是否为String类型

obj instanceof String

8.浏览器端的储存技术

cookie/webStorage(localStorage,sessionStorage)/globalStorage/

userData/IndexedDB/Google Gear/Flash ShareObject

9.嵌入在HTML文档中的图像格式可以是

.jpg/.jpeg/.png/.gif/.bmp/.webp

重要!:数组有哪些方法?

join()

push()和pop()

shift() 和 unshift()

sort()

reverse()

concat()

slice()

splice()

indexOf()和 lastIndexOf() (ES5新增)

forEach() (ES5新增)

map() (ES5新增)

filter() (ES5新增)

every() (ES5新增)

some() (ES5新增)

reduce()和 reduceRight() (ES5新增)

  1. substring和slice得区别?

参数都为正时没区别,参数为负数时返回值不同。

  1. 简述VUE的生命周期有哪些?

beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、 beforeDestroy、destroyed

  1. v-if和v-show的区别?

v-if

v-show

本质

条件渲染,添加或删除元素

控制display属性

首次渲染消耗

切换渲染消耗

(css切换)小

配套

v-else

--

  1. 简述vue数据双向绑定实现的原理/vue响应式原理

是通过数据劫持结合发布订阅模式的方式实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变。利用了Object.defineProperty()这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。

它接收三个参数,1.要操作的对象2.要定义或修改的对象属性名3.属性描述符。其中重点就是属性描述符。

属性描述符:是一个对象,主要有两种形式:数据描述符号、获取描述符。这两种对象只能选择一种使用,不能混合两种描述符的属性同时使用。getset属于储存描述对象的属性。

  1. 在vue中使用Watch方法监听数组需要注意些什么?

  1. vue router的原理?

结合router-link和router-view通过改变 URL,在不重新请求页面的情况下,更新页面视图。

  1. 如何解决跨域问题?

理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域

出于安全考虑,服务器不允许 ajax 跨域获取数据,但是可以跨域获取文件内容,所以基于这一点,可以动态创建 script 标签,使用标签的 src 属性访问 js 文件的形式获取 js 脚本,并且这个 js 脚本中的内容是函数调用,该函数调用的参数是服务器返回的数据,为了获取这里的参数数据,需要事先在页面中定义回调函数,在回调函数中处理服务器返回的数据,这就是解决跨域问题的主流解决方案

  1. 如何实现深拷贝?
    1. 利用JSON的stringify方法和parse方法实现(弊端)
    2. 用for...in实现遍历和复制
    3. 利用数组的Array.prototype.forEach进行深拷贝
    4. 递归

  1. 多个iframe 之间怎么传值?

  1. 从输入url到浏览器显示页面发生了什么?
    1. 输入网址
    2. 浏览器查找域名的IP地址
    3. 建立TCP链接
    4. 浏览器向WEB服务器发起Http请求
    5. 服务器端处理响应
    6. 关闭TCP链接
    7. 浏览器解析资源

h) 浏览器布局渲染

  1. vue里的data数据更新了,但视图没有更新是什么原因导致的,怎么解决?

原因:

  1. vue无法检测实例被创建时不存在于data中的property;
  2. vue无法检测对象property的添加或移除;
  3. vue不能检测通过数组索引直接修改的数组项;
  4. vue不能检测直接修改数组长度的变化;
  5. 在异步更新执行之前操作DOM数据不会变化;

解决办法:

  1. 使用this.$set()修改数据;
  2. this.$forceUpdate(),强制视图更新

c)在数据变化之后立即使用Vue.nextTick(callback)

  1. VUE的单页面应用首页加载白屏是什么原因?怎么解决?

原因:

单页面应用的html是靠js 生成,因为首屏需要加载很大的js文件(app.js 和vendor.js),所以当网速差的时候会产生一定程度的白屏

解决办法:

  1. 路由懒加载
  2. CDN资源优化
  3. gzip压缩
  4. 在vue.config.js中关闭productionSourceMap
  5. SSR,服务器渲染,在服务器端事先拼装好首页所需的html

f) 首页加loading或骨架屏(优化体验)

  1. 简述VUE的过滤器?

  1. 哪几种情况会导致js内存泄漏?
    1. 意外的全局变量
    2. 闭包
    3. 未清除dom元素的引用
    4. 循环引用

e) 未结束的计时器或回调

  1. 是否使用过函数防抖和节流,简述一下?
    1. 函数防抖:任务频繁触发情况下,只有任务触发的间隔超过指定间隔的时候,任务才会被执行

b) 函数节流:指定时间间隔内只会执行一次任务

  1. 了解js中的事件循环吗?

事件循环步骤如下:

    1. 所有同步任务都在主线程执行,形成一个执行栈
    2. 主线程之外有一个消息队列,只要异步操作执行完成(就是进入了回调),就到消息队列排队等候回调
    3. 同步代码,即栈中代码执行完后,就到消息队列中读取异步任务,结束异步人物的等待状态,并且放到执行栈中(并不是执行在队列执行),开始执行。

d) 不停重复上面三步。

  1. 在setTimeout中设置定时500ms是真的500ms吗?什么原因导致?谁导致的?

  1. 父子和兄弟和爷孙组件传参
    1. 父传子:props/

子传父:绑定事件,this.$emit(事件名,参数)

  1. vuex的工作流程就是:
    (1)通过dispatch去提交一个actions,
    (2) actions接收到这个事件之后,在actions中可以执行一些异步|同步操作,根据不同的情况去分发给不同的mutations,
    (3)actions通过commit去触发mutations,

(4) mutations去更新state数据,state更新之后,就会通知vue进行渲染

  1. foreach和map的区别

forEach()方法不会返回执行结果,forEach()会修改原来的数组。而map()方法会得到一个新的数组并返回。

  1. ES6新特性

变量声明/模版字符串/箭头函数/函数参数默认值/扩展运算符/for...of for...in/class类

  1. 父子组件嵌套时生命周期的执行顺序
    1. 父组件:beforeCreate
    2. 父组件:created
    3. 父组件:beforeMount
    4. 子组件:beforeCreate
    5. 子组件:created
    6. 子组件:beforeMounte
    7. 子组件:mounted

h) 父组件:mounted

  1. 数据类型
    1. 基础数据类型/简单数据类型:Number/Boolean/String/Undefined/Null

b) 引用数据类型:Object

  1. ElementUI常用组件

由于样式比较统一,常用于后台管理系统,常用的有导航栏,按钮,提示框,小图标等等

  1. 深克隆/浅克隆

浅克隆:原始类型按值传递,对象类型按引用传递,与原对象共用一处内存,修改会使原对象也修改

深克隆:在内存中开辟一块新内存,将原对象中的所有值全部复制过去,与原对象完全脱离,修改新对象中的属性值不会影响原对象

  1. ES6有多少种操作数组的方法

forEach/map/filter/find/every/some/reduce

  1. Vue路由有几种方式,他们分别是什么

嵌套路由/动态路由/路由守卫/编程式导航

  1. 显式原型:每个函数function都有一个prototype,这个就是显式原型

隐式原型:每个实例对象都有一个__proto__,这个就是隐式原型

  1. vuex的使用
    1. store.js
    2. 获取:this.$store.state.属性名

c) 修改:this.$store.commit(“store函数名”)

  1. vue路由守卫
    1. 全局路由守卫:router.beforeEach(to,from,next)
      1. to:进入哪个路由
      2. from:从哪个路由离开

iii. next:函数,决定是否展示你要看到的路由页面

  1. vue的两个核心:双向数据绑定/组件系统

  1. js垃圾回收机制说下你的理解?

原理

找到不再被使用的变量,然后释放其占用的内存,但这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定时间间隔周期性的执行

回收方式

a.标记清除

当变量进入环境时,将这个变量标记为“进入环境”;当变量离开环境时,则将其标记为“离开环境”。标记“离开环境”的就回收内存

b.引入计数(低级浏览器)

当变量声明,第一次赋值时记为1,然后当这个变量值改变时,记录为0,将计数为0的回收

  1. VUE项目中苹果端和安卓端遇到的兼容性问题有哪些?

1. 日期格式问题. 这个问题应该是遇到最多的.也是最多被熟知的.safari不识别2018-08-08的日期格式.会显示NaN.

解决方式: 在处理日期之前转换为2018/08/08的格式.

2. 设置了input背景颜色在safari颜色异常显示的问题. 这是由于safari对于input有默认的渲染背景颜色.必须把input原生颜色清除.否则会造成颜色显示特别不纯正.

解决方式: 所有的input加上-webkit-appearance: none;属性.

3.safari不兼容select居中属性text-align-last.

解决方式:如果内容宽度固定:  这个如果你的select内的内容的宽度是固定的还好办.直接用空格或者padding就能解决.

  1. vue项目中怎么储存账号密码?

前端实现记住密码功能有两种方式:1.浏览器自带保存功能2.将登陆信息储存在cookie中

下面我们说一下第二种方法的实现思路:

1.在向后台提交登陆信息成功后,判断用户是否勾选记住密码,如果勾选,将账号,密码以及token(需要封装拦截器)储存在cookie中,如果没勾选,向cookie中存入账号和密码字段为空

2.密码需要加密,目前加密方式有很多种sha1,base64和md5等

3.npm安装base64依赖:

在页面加载时从cookie中获取登录信息,判断是否存在,如果存在,需要先将密码解密,将其赋值给登录表单,并将记住密码选择框勾选

  1. js中实现继承的方式

原型连继承/构造继承/拷贝继承/组合继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值