《一名【合格】前端工程师的自检清单》答案参考(一)

3,877 阅读5分钟

开篇

最近这个文章很火,列了【合格】前端工程师需要掌握的技能表,看到作者一直不断自省和学习来保持竞争力,同为前端工程师深感惭愧,故写下此文简要回答一下文章里提到的技术问题,技术一般,大家仅仅当做参考就成,文章很长会分多篇来写。

传送门 一名【合格】前端工程师的自检清单

JavaScript基础

变量和类型

  1. JavaScript规定了几种数据类型
    7种,根据堆栈储存方式的不同分为简单类型和复杂类型

    • 简单类型:stringnumberbooleannullundefinedsymbol(ES6新增,表示独一无二的值)
    • 复杂类型:object
  2. JavaScript对象的底层结构是什么
    不甚了解,不敢妄言

  3. Symbol类型在实际开发中的应用,手写Symbol
    Symbol表示一个独一无二的值,如果我们使用了一个他人提供的对象,要为此对象添加方法,那么必须保证属性名不能冲突,使用Symbol就能很好的保证这一点,Symbol与任何值都不相等!这个东西了解不深,传送门-ES6标准入门-Symobl

  4. JavaScript中的变量具体储存形式
    变量的储存方式取决于变量的类型是基本类型还是引用类型

    • 基本类型:以键值对的方式储存在栈内存中
    • 复杂类型:会在堆内存中开辟一块空间,储存这个对象的值,并同时在栈内存中储存变量和指向对象的指针
      来源:《JavaScript高级程序设计》69页
  5. 基本类型对应的内置对象,以及他们之间的装箱拆箱操作
    这个说的是基本包装类型,我也理解不深,直接看《JavaScript高级程序设计》119页

  6. 理解值类型和引用类型
    这个和4一样,值类型就是基本类型,引用类型就是复杂类型

  7. nullundefined的区别
    null表示空对象指针,将null赋值给变量,就表示该变量指向空对象
    undefined表示未定义,声明一个变量但不初始化,那么它的值就是undefined
    null主要表示一个变量还没有真正保存对象的时候,它的值就应该为null,这是意料之中的空,而undefined通常表示意料之外的内容,如未初始化的变量,一般来说我们不应该显式的使用undefined
    来源《JavaScript高级程序设计》24页

  8. 至少可以说出三种判断JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型

    • typeof操作符,可以判断基本数据类型,对于引用数据类型全都返回Object
    • instanceof操作符,obj instanceof Object 检测Object.prototype是否存在于参数obj的原型链上,主要用来判断变量是否是某个构造函数的实例,但是Object是所有对象的原型,所以在obj instanceof Object中,无论参数obj是数组还是函数都会返回true
    • constructorprototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的,同样的这个也只能输出构造函数

    如需判断基本数据类型,使用typeof,判断引用类型用instanceofconstructor,实际上所有引用类型都是对象,只不过构造函数不同罢了,强行判断引用类型,要么只是判断常见的几种引用类型比如数组,函数,Date,正则等等,要么只能输出构造函数

    准确判断数组类型使用es5提供的方法Array.isArray(value)
    来源《JavaScript高级程序设计》83页,一整章

  9. 可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用
    隐式转换一般说的是Boolean的转换

    • Boolean 场景,变量放在if的判断语句时,如果变量不是布尔值,那么就会发生隐式转换
      • String,非空字符串会转换成true,空字符串会转换成false
      • Number, 非0会转换成true,0会转换成false
      • Object,任何对象都会转成true

    当然Numebr也会发生隐式转换,不过这个一般用不到,也很简单 来源《JavaScript高级程序设计》26页

  10. 出现小数精度丢失的原因,JavaScript可以存储的最大数字、最大安全数字,JavaScript处理大数字的方法、避免精度丢失的方法

    • 精度丢失原因,说是JavaScript使用了IEEE 754规范,二进制储存十进制的小数时不能完整的表示小数
    • 能够表示的最大数字Number.MAX_VALUE等于1.7976931348623157e+308,最大安全数字Number.MAX_SAFE_INTEGER等于9007199254740991
    • 避免精度丢失
      • 计算小数时,先乘100或1000,变成整数再运算
      • 如果值超出了安全整数,有一个最新提案,BigInt大整数,它可以表示任意大小的整数,注意只能表示整数,而不受安全整数的限制

    来源ES6标准入门、《JavaScript高级程序设计》29页

先写10个吧,太累了,果然,合格不是那么好达到的,加油吧!!!

github,欢迎issue