一名【合格】前端工程师的自检清单 - 答案版(JavaScript基础篇)

契机

在这里看到了一篇蛮有意义的的文章,一名【合格】前端工程师的自检清单.javascript

看完以后感触颇深,以为本身距离一名合格的前端工程师还有差距,因而本身尝试着对照着原做者本身整理的每一点,本身做了初步的解答,准备写成文章,作一个记录吧.前端

因为这份自检清单的点太多了,准备分不少期来作一个整理,若是有答得很差的点,欢迎你们指正,若是原文做者对于本文有任何问题,也欢迎指出,谢谢.java

1、JavaScript基础

变量和类型

1.JavaScript规定了几种语言类型

规定了7种语言类型: nullundefinedStringNumberBooleanObjectSymbol,其中引用类型为Object,其他为基本类型.数组

2.JavaScript对象的底层数据结构是什么

Dictionary,也就是字典安全

3.Symbol类型在实际开发中的应用、可手动实现一个简单的Symbol

Symbol表示独一无二的值,它是一切非字符串的对象key的集合.Symbol 值经过Symbol函数生成.在实际开发中,常常用于定义常量或者定义私有属性.前端工程师

在实现Symbol的时候,我发现Symbol不少特性都没法模拟,例如使用typeof,结果为"symbol",若是咱们要模拟实现一个Symbol的话,基本的思路就是构建一个Symbol函数,而后直接返回一个独一无二的值.数据结构

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

基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,经过按值访问.闭包

引用类型是保存在堆内存中的对象,值大小不固定,栈内存中存放的该对象的访问地址指向堆内存中的对象,JavaScript不容许直接访问堆内存中的位置,所以操做对象时,实际操做对象的引用.app

5.基本类型对应的内置对象,以及他们之间的装箱拆箱操做

String(),Number(),Boolean(),Symbol()函数

装箱为new xxxx(),拆箱为toString(),valueOf()

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

值类型,也就是基本类型;

引用类型开辟堆内存,会给全部赋值的对象添加一个引用,指向一个地址,因此引用类型会出现一处修改,到处变化.

7.nullundefined的区别

undefined为变量初始化没有赋具体的值,当声明的变量还未被初始化时,变量的默认值为undefined.

null表示为变量为空,或者对象为空,即不会占用内存,在清理内存占用可使用null赋值.

null == undefined; //true
null === undefined; //false
typeof undefined; // undefined
typeof null; //object
复制代码

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

  1. typeof
  • 对于基本类型,除null之外,都可以返回正确的结果;
  • 对于引用类型,除function之外,一概返object类型;
  • 对于null,返回object类型;
  • 对于function返回function类型;
  1. instanceof instanceof只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪一种类型.

  2. constructor

  • nullundefined是无效的对象,所以是不会有constructor存在的,这两种类型的数据须要经过其余方式来判断;
  • 函数的constructor是不稳定的,这个主要体如今自定义对象上,当开发者重写 prototype后,原有的constructor引用会丢失,constructor会默认为Object
  1. toString 对于Object对象,直接调用toString()就能返回[object Object];而对于其余对象,则须要经过call/apply来调用才能返回正确的类型信息.

准确的判断数组类型: Array.isArray()

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

隐式类型转换的场景:

  • 使用if做判断的时候
  • 运算符的转换,例如在作+运算操做时,1+'2' // '12'
  • 对象的转换

转换原则: 基本上大多数类型作隐式转换时都会调用valueOftoString

如何避免:

  • 在进行值比较时,使用===替代==;
  • 尽可能不要使用+运算符作字符串与数字的直接运算

应用:

  • 在作if判断时能够直接使用undefined或者null与布尔值的转换、数字0和1与布尔值的转换以及空字符串与布尔值的转换
  • 把字符串类型转换为数字
let i = '1'
console.log(typeof(+i))
复制代码

10.出现小数精度丢失的缘由,JavaScript能够存储的最大数字、最大安全数字,JavaScript处理大数字的方法、避免精度丢失的方法

  • 小数精度丢失的缘由:Number类型采用IEEE754标准中的“双精度浮点数”来表示一个数字,不区分整数和浮点数.
  • 最大数字:Number.MAX_VALUE; // 1.7976931348623157e+308
  • 最小数字:Number.MIN_VALUE; // 5e-324
  • 最大安全数字:Number.MAX_SAFE_INTEGER; // 9007199254740991
  • 最小安全数字:Number.MIN_SAFE_INTEGER; // -9007199254740991
  • 处理大数字的方法:能够采用字符串进行存储和处理
  • 避免精度丢失的方法:能够采用乘以10的倍数来扩大数字,再除以10的倍数,获得准确的数值,还有能够采用toFixed(0)

结语

变量和类型这一块的答案都写了这么多,后面的原型和原型链这些,可能就要花很大的篇幅来写答案了,不过我仍是会坚持一直更新下去的,也是对本身的一个知识累积,加油吧!

系列连接:

相关文章
相关标签/搜索