知识点

171 阅读3分钟

1、闭包的理解

从一道经典面试题看闭包

理解闭包js回收机制

2.TCP/IP

TCP,即传输控制协议

IP地址分类

3、堆和栈的理解

堆和栈的理解

区别

4、http协议的理解

关于http协议的面试题

http协议介绍

http缓存机制

5、this指向

ES6中箭头函数VS普通函数的this指向

6、浅说XSS和CSRF

浅说XSS和CSRF

7、虚拟dom

虚拟dom理解

8、promise的原理

简述promise的原理

9、_proto_和prototype的关系及区别

_proto_和prototype的关系及区别

10、vue生命周期created与mounted

vue生命周期created与mounted

vue 10个生命周期

vue的activated与deactivated

vue中父子组件传值,解决钩子函数mounted只运行一次的问题

11、mvc与mvvm的理解

mvc与mvvm的理解

12、前端性能优化之重排和重绘

前端性能优化之重排和重绘

13、清除浮动的最常用的四种方法,以及优缺点

清除浮动的最常用的四种方法,以及优缺点

css万能清除法的原理

14、css3动画

css3动画

15、Object.defineProperty

Object.defineProperty看vue的数据双向绑定

16、js中sort()方法原理及使用

js中sort()方法原理及使用

17、vuex原理

vuex的原理

18、判断数据类型

判断数据类型

19、vue-router简介

vue-router简介

20、promise的使用和原理

promise的使用和原理

21、new()实现了什么

new()实现了什么

22、简述三次握手和四次挥手

简述三次握手和四次挥手

23、vue的自定义指令

vue的自定义指令

function Sum(value) {
    function add(t) {
        value = value + t;
        return add;
    }
    add.valueOf = function() {
        return value;
    }
    return add;
}

Sum(1)(2)(3).valueOf();   //6
// 题1

let a = {}
console.log(a.b)   //undefined

let b = []
console.log(b.c)   //undefined
// 题2
var go = console;
var langue = {
    name: '',
    php() {
        var t = this;         //this指向langue
        go.info(t.name)       //即  langue.name   输出空
    },
    python: () => {
        let t = this;         //箭头函数不改变this的指向,this指向window
        go.info(t.name)       //即 window.name   因为window存在name这个属性,输出的也是空
    }
}

langue.php();    
langue.python();

// 1、普通函数的this指向:指向直接调用者,也就是是最终调用它的对象,没有直接调用者,this指向window
// 2、箭头函数的this指向:指向上下文里对象的this指向,如果没有上下文对象,this指向window
// 箭头函数不改变this的指向
// 题3

Object.prototype.getLength = function() {
    return Object.keys(this).length;
}
let data = {
    a: 1,
    b: 2
}

if(typeof data === 'object' && data.getLength()) {
    for(var key in Object.keys(data)) {
        console.log(key, data)
    }
}

//结果
// a {a: 1, b: 2}
// b {a: 1, b: 2}
// getLength {a: 1, b: 2}

// for in 遍历:主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性

// 解决:

// 方法一: 只遍历对象自身的属性,而不遍历继承于原型链上的属性,使用hasOwnProperty 方法过滤一下。
if(typeof data === 'object' && data.getLength()) {
    for(var key in data) {
        if(data.hasOwnProperty(key)){
             console.log(key, data)
        }
    }
}

//方法二:使用for of 遍历
// Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,
// 其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
// 通俗点就是 Object.entries() 可以把一个对象的键值以数组的形式遍历出来,结果和 for...in 一致,但不会遍历原型属性。

if(typeof data === 'object' && data.getLength()) {
    for(var key of Object.entries(data)) {
        console.log(key, data)
    }
}