转载:一名【合格】前端工程师的自检清单(一)

前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。

winter在他的《重学前端》课程中提到:到现在为止,前端工程师已经成为研发体系中的重要岗位之一。可是,与此相对的是,我发现极少或者几乎没有大学的计算机专业愿意开设前端课程,更没有系统性的教学方案出现。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。

建立自己的知识体系。它能帮助你更系统性的学习,同时你也时刻能知道自己哪些地方是不足的。


转载:一名【合格】前端工程师的自检清单(一)_第1张图片

一、JavaScript基础

变量和类型

1.JavaScript规定了几种数据类型

7种,根据堆栈储存方式的不同分为简单类型和复杂类型

  • 简单类型:string、number、boolean、null、undefined、symbol(ES6新增,表示独一无二的值)
  • 复杂类型:object
2.JavaScript对象的底层结构是什么

???

3.Symbol类型在实际开发中的应用,手写Symbol

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

4.JavaScript中的变量具体储存形式

变量的储存方式取决于变量的类型是基本类型还是引用类型

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

这个说的是基本包装类型,我也理解不深,直接看《JavaScript高级程序设计》119页

6.理解值类型和引用类型

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

7.null和undefined的区别

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

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

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

准确判断数组类型使用es5提供的方法Array.isArray(value)

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

隐式转换一般说的是Boolean的转换

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

当然Numebr也会发生隐式转换,不过这个一般用不到,也很简单

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

你可能感兴趣的:(转载:一名【合格】前端工程师的自检清单(一))