在这里看到了一篇蛮有意义的的文章,一名【合格】前端工程师的自检清单.javascript
看完以后感触颇深,以为本身距离一名合格的前端工程师还有差距,因而本身尝试着对照着原做者本身整理的每一点,本身做了初步的解答,准备写成文章,作一个记录吧.前端
因为这份自检清单的点太多了,准备分不少期来作一个整理,若是有答得很差的点,欢迎你们指正,若是原文做者对于本文有任何问题,也欢迎指出,谢谢.java
JavaScript
规定了几种语言类型规定了7种语言类型: null
、undefined
、String
、Number
、Boolean
、Object
、Symbol
,其中引用类型为Object
,其他为基本类型.数组
JavaScript
对象的底层数据结构是什么Dictionary
,也就是字典安全
Symbol
类型在实际开发中的应用、可手动实现一个简单的Symbol
Symbol表示独一无二的值,它是一切非字符串的对象key的集合.Symbol
值经过Symbol
函数生成.在实际开发中,常常用于定义常量或者定义私有属性.前端工程师
在实现Symbol
的时候,我发现Symbol
不少特性都没法模拟,例如使用typeof
,结果为"symbol",若是咱们要模拟实现一个Symbol
的话,基本的思路就是构建一个Symbol
函数,而后直接返回一个独一无二的值.数据结构
JavaScript
中的变量在内存中的具体存储形式基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,经过按值访问.闭包
引用类型是保存在堆内存中的对象,值大小不固定,栈内存中存放的该对象的访问地址指向堆内存中的对象,JavaScript
不容许直接访问堆内存中的位置,所以操做对象时,实际操做对象的引用.app
String()
,Number()
,Boolean()
,Symbol()
函数
装箱为new xxxx(),拆箱为toString()
,valueOf()
值类型,也就是基本类型;
引用类型开辟堆内存,会给全部赋值的对象添加一个引用,指向一个地址,因此引用类型会出现一处修改,到处变化.
null
和undefined
的区别undefined
为变量初始化没有赋具体的值,当声明的变量还未被初始化时,变量的默认值为undefined
.
null
表示为变量为空,或者对象为空,即不会占用内存,在清理内存占用可使用null
赋值.
null == undefined; //true
null === undefined; //false
typeof undefined; // undefined
typeof null; //object
复制代码
typeof
null
之外,都可以返回正确的结果;function
之外,一概返object
类型;null
,返回object
类型;function
返回function
类型;instanceof
instanceof
只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪一种类型.
constructor
null
和undefined
是无效的对象,所以是不会有constructor
存在的,这两种类型的数据须要经过其余方式来判断;constructor
是不稳定的,这个主要体如今自定义对象上,当开发者重写 prototype
后,原有的constructor
引用会丢失,constructor
会默认为Object
toString
对于Object
对象,直接调用toString()
就能返回[object Object]
;而对于其余对象,则须要经过call
/apply
来调用才能返回正确的类型信息.准确的判断数组类型: Array.isArray()
隐式类型转换的场景:
if
做判断的时候+
运算操做时,1+'2' // '12'
转换原则: 基本上大多数类型作隐式转换时都会调用valueOf
和toString
如何避免:
===
替代==
;+
运算符作字符串与数字的直接运算应用:
if
判断时能够直接使用undefined
或者null
与布尔值的转换、数字0和1与布尔值的转换以及空字符串与布尔值的转换let i = '1'
console.log(typeof(+i))
复制代码
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
变量和类型这一块的答案都写了这么多,后面的原型和原型链这些,可能就要花很大的篇幅来写答案了,不过我仍是会坚持一直更新下去的,也是对本身的一个知识累积,加油吧!
系列连接: