2020面试所遇问题整理

js

说一说typeofinstanceof 的区别

typeof用于检测数据类型,返回6种值:number,string,boolean,undefined,object,function
数组和null类型都返回object;NaN返回number
instanceof用于判断某个变量是否是某个对象的实例,返回值为truefalse;区别数组和对象
A instanceof B 的意思是 A 对象是不是 B 构造函数构造出来的,A 对象
的原型链上有没有 B 的原型

=====的区别

==在比较的时候,只比较定义的两个量的值,仅仅比较两个变量的值,不管数据类型
===在比较的时候,比较值和数据类型.必需同时满足才为true

深拷贝和浅拷贝的区别

假设B复制A,修改A,看B的变化
B改变,则是浅拷贝,反之则是深拷贝
浅拷贝只是增加一个指针智爱香已存在的内存地址
深拷贝是增加一个指针并申请了一个新的内存,使这个增加的指针指向这个新的内存

参数是number类型,返回长度是参数num的任意字符串

[1,2,3,4,5,[4,3,8,7,[2,5,9]]0,6];扁平化对此数组去重排序

[1,2,6,9,0,2,3,5,0,7,1],将数组内的0移到数组最后位置

如何获取对象的属性值

for(var key in obj){
console.log(obj[key])
}

css

盒子模型(怪异模式和标准模式)

你所知道的选择器

id选择器#id,class 选择器.class,标签选择器tag,通配符选择器*{},父子选择器/派生选择器最外面的结构 外面的结构 里面的结构{},直接子元素选择div > em{},并列选择器div.select{}.分组选择器div,p,em{},伪类选择器

BFC

如何触发一个盒子的 bfc
1)position:absolute;
2)display:inline-block;
3)float:left/right; //浮动
4)overflow:hidden; //溢出盒子的部分要隐藏展示
所解决问题:margin 塌陷,margin 合并

emrem的区别

同步和异步的区别

右边宽度固定,左边自适应

第一种:

<style>
body{
    display: flex;
}
.left{
    background-color: orange;
    height: 200px;
    flex: 1;
}
.right{
    background-color: red;
    height: 200px;
    width: 100px;
}
</style>
<body>
    <div class="left"></div>
    <div class="right"></div>
</body>

第二种:

<style>
    div {
        height: 200px;
    }
    .left {
        float: right;
        width: 200px;
        background-color: orange;
    }
    .right {
        margin-right: 200px;
        background-color: red;
    }
</style>
<body>
    <div class="left"></div>
    <div class="right"></div>
</body>

水平居中

第一种

#container{
    position:relative;
}

#center{
    width:100px;
    height:100px;
    position:absolute;
    top:50%;
    left:50%;
    transform: translate(-50%,-50%);
}

第二种

#container{
    position:relative;
}

#center{
    width:100px;
    height:100px;
    position:absolute;
    top:50%;
    left:50%;
    margin:-50px 0 0 -50px;
}

第三种

#container{
    position:relative;
}

#center{
    position:absolute;
    margin:auto;
    top:0;
    bottom:0;
    left:0;
    right:0;
}

第四种

#container{
    display:flex;
    justify-content:center;
    align-items: center;
}

vue

谈一谈Vue生命周期的了解

watchcomputed的区别

  • computed不支持异步; watch支持异步
  • 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed;
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
watch: {
    firstName: function (val) {
      this.fullName = val + ' ' +this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + '' + val
    }
  }

fullName: function () {
      return this.firstName + ' ' +this.lastName
    }
  • watch更加适用于监听某一个值的变化并做对应的操作;监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
new Vue({
    el: '#id',
    template: `<div>
        // ...
    </div>`,
    data: {
        firstName: 'Leo',
        lastName: 'Alan',
        obj1: {
            a: 0
        }
    },
    watch: {
        // 监听firstName,当firstName发生变化时就会执行该函数
        firstName () {
            // 执行需要的操作...
            // 注:初始化不会执行,只有当被监听的值(firstName)发生变化时才会执行
        },

        // 监听lastName
        lastName: {
            handler (newName, oldName) {
                // 执行需要的操作...
            },
            immediate: true // true: 初始化时就会先执行一遍该监听对应的操作    
        },

        obj1: {
            handler () {
                // 执行需要的操作...
            },
            deep: true // 该属性默认值为false. 
            // 当被监听的值是对象,只有deep为true时,对应属性的值(obj1.a)发生变化时才能触发监听事件,但是这样非常消耗性能
        },

        // 监听对象具体的属性, deep就不需要设置为true了
        'obj1.a': {
            handler () {
                // 执行需要的操作...
            }
        }

    }
})

给数组添加值,能否监听到

vue能监听到数组变化的方法:push(),pop(),shift(),unshift(),splice(),sort(),reverse();vue通过重写数组的某些方法来监听数组变化

组件之间的传值,子组件可以反向给父组件传值吗?

  • 父传子:子组件通过 props方法获取父组件传递过来的值(props中可以定义能接收的数据类型,如果不符合会报错。),子组件不能修改数据
  • 子传父:子组件通过$emit方法
    在这里插入图片描述
  • 兄弟组件传值:vuex

数据双向绑定的原理

通过Object.defineProperty()劫持数组为其设置getter和setter后,在数据变动时发布消息给订阅者,触发相应监听回调

路由的两种模式

  • hash ——即地址栏URL中的#符号
    比如这个URL:http://www.abc.com/#/hello, hash 的值为#/hello。它的特点在于:hash 虽然出现URL中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。
  • history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法。(需要特定浏览器支持)

es6

es6用过哪些

var,let,const 三者的区别

var:变量声明提升;可重复定义;可挂载到window(定义的变量名与window里的属性名相同);存在闭包问题(全局作用域 window函数作用域(函数执行产生的作用域))
let:没有变量声明提升;不能重复定义;不会挂载到window;块级作用域{};
暂时性死区:发生在欲编译阶段 ,一定要先定义后使用;
解决了闭包
const 存的是常量,不可以改变
在这里插入图片描述

箭头函数中this的指向和普通js中this的指向

es6中的异步方式有哪些?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值