前端面试基础二

typeof 能判断哪些类型?

考点: js 变量类型

  • 识别所有值类型
  • 识别函数
  • 判断是否是引用类型(不可在细分)

判断所有值类型

let a; typeof a // 'undefined'
const str = 'abc'; typeof str // 'string'
const n = 100; typeof str // 'number'
const b = true; typeof str // 'boolean'
const s = Symbol('s'); typeof str // 'symbol'

识别函数

typeof console.log // 'function'
typeof function () {} // 'function'

判断是否是引用类型(不可在细分)

typeof null // 'object'
typeof ['a', 'b'] // 'object'
typeof {x: 100} // 'object'

发散面试题-深拷贝

const obj1 = {
    age: 30,
    name: 'yang',
    address: {
        city: '北京',
        area: '昌平'
    },
    arr: ['a', 'b', 'c']
}

const obj2 = deepClone(obj1)

obj2.address.city = '上海'
console.log(obj1.address.city) // 北京
console.log(obj2.address.city) // 上海

/**
 * @description: 深拷贝
 * @param {object} obj 要深拷贝的对象 
 * @return: {object} obj
 */
function deepClone (obj = {}) {
    if (typeof obj !== 'object' || obj == null) {
        // obj 不是对象和数组或者是null, 直接返回
        return obj
    }

    // 初始化返回结果
    let result
    if (obj instanceof Array) {
        result = []
    } else {
        result = {}
    }

    for (let key in obj) {
        // 此处判断保证 key 不是原型的属性
        if (obj.hasOwnProperty(key)) {
            // 递归调用
            result[key] = deepClone(obj[key])
        }
    }

    return result
}

何时使用 == 何时使用 === ?

考点: 强制类型转换

== 运算符

100 == '100' // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true

== 尽量让他们的值转换之后去对比相等

什么时候用 === ?

// 除了 == null 之外, 其它的一律都用 ===, 如
const obj = { x: 100 }
if (obj.a == null) {}
// 相当于 if (obj.a === null || obj.a === undefined) {}

if 语句和逻辑运算

// 一下是 falsely 变量, 除此之外都是 truly 变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false

逻辑判断

console.log(10 && 0) // 0
console.log(0 && 10) // 0
console.log('' || 'abc') // abc
console.log(!window.abc) // true

值类型和引用类型的区别?

考点: 强制类型转换

const obj1 = { x: 100, y: 200 }
const obj2 = obj1
let x1 = obj1.x
obj2.x = 101
x1 = 102
console.log(obj1) // { x: 101, y: 200 }

window.onload 和 DOMContenLoaded 的区别?

考点: 页面加载过程

...

JS 创建 10 个 <a> 标签, 点击的时候弹出对应的序号

考点: js 作用域

...

手写节流 throttle, 防抖 debounce

考点: 性能, 体验优化

...

Promise 解决了什么问题?

考点: js 异步

...

前端知识体系

JS 基础语法

JS-Web-API

开发环境

运行环境

posted @ 2020-04-26 18:35  Helzeo  阅读(125)  评论(0编辑  收藏  举报