前端科举八股文-JAVASCRIPT篇
- Js的变量类型,区别是什么
- 平时有用过symbol吗
- 函数闭包的理解?
- js的原型链? Function === Function.constructor 返回值?
- promise的出现是为了解决什么问题?
- 前端中的事件流
- 事件委托?
- js的new操作符做了哪些事情
- bind call apply的区别
- 浏览器的垃圾回收机制
- 如何判断是不是数组?
- 垃圾回收机制
- mouseover和mouseenter的区别
- 前端的模块化
- Js代码的执行顺序
- 讲一下你对懒加载和预加载的理解
- Js的new操作符?
- Js的防抖和节流
- 深拷贝,浅拷贝的区别?
- 如何实现深拷贝
- 如何实现所有对象的深拷贝?
- 数组去重方法?
- 说一下virtual dom
- 讲一下js实现继承的几种方式
- 0.1+0.2 === 0.3? 为什么 如何解决
- Typeof NaN等于什么? NaN === NaN ?
- == , ===和object.is的区别?
- 箭头函数和普通函数的区别?
- map和weakMap的区别?
- js的设计模式
Js的变量类型,区别是什么
基本number boolean undefined null string es6新增的 symbol
引用 object array es6新增的 set map weakSet weakMap
区别 基本类型将值直接存储在栈中,引用对象类型将值存储在堆中,在栈中存储的只是指向值的指针。
平时有用过symbol吗
symbol是es6新增的一个基本对象类型。它表示一个独一无二的值。
日常开发中我用它来清除魔法字符串。比如我们再给一个业务常量赋值初始值的时候并不关心它的初始值是什么,只需要保证这个值不和其他值重复。这时候就可以使用symbol来初始化这个常量。
const student_1 = 'zhangsan'
const student_2 = 'lisi'
// 如果这个时候有个学生名字叫章三
const student_3 = 'zhangsan' // 这行代码容易出事
我们定义常量并不关心常量的值,只需要保证他们都不重复时可以使用symbol
const student_1 = Symbol()
const student_2 = Symbol()
const student_3 = Symbol()
// 如果觉得这种写法语意化不强,实在是不好理解也可以这样改写
const student_1 = Symbol('zhangsan')
const student_2 = Symbol('lisi')
const student_3 = Symbol('zhangsan')
由于Symbold的特殊性,此时的两个symbol值也不会相等 student_1 !== student_3
还有一个用法是,使用symbol定义的对象属性不能被遍历方法遍历。可以利用这个特性封装一些不需要对外暴露的对象属性或者方法。使代码更加优雅
const me = {
name:'wxs',
age:14,
[Symbol</