这个记录(或说笔记),参照一名【合格】前端工程师的自检清单这篇文章,根据里面所提的某些问题,进行归纳和回答。总结内容,有很多来来自各位前辈的文章,在这谢谢各位!为方便查找,我把其他文章贴在下面:
- JavaScript基础自检之原型和原型链
- JavaScript基础自检之变量和类型
- JavaScript基础自检只作用域闭包
JavaScript对象的底层数据结构是什么?
我认为应该是数组和链表,不知道这个回答对不对。有错误,请各位指出来。
Symbol类型在实际开发中的应用、可手动实现一个简单的Symbol。
Symbol,是ES6新引入的基础数据类型之一。类似字符串但又不是,可做对象中的key,且是唯一不重复的。 Symbol在ES5的实现,可参考这篇文章:ES6 系列之模拟实现 Symbol 类型
JavaScript中的变量在内存中的具体存储形式
JavaScirpt中的变量是没有类型的,类型所存储(或指向)的值又类型。JavaScript中的值类型:
- 基本数据类型
null、undefined、number、boolean、string以及symbol。 - 引用数据类型
object
变量值存储于内存中,分别为堆和栈。其中,基本数据类型存储于栈中;而复合数据类型的变量存储于栈中,是一个指向值的指针,真正的值存储于堆中。
基本类型对应的内置对象,以及它们之间的拆箱和装箱操作。
undefined和null都是单一值,也就不会有拆箱和装箱;下面我们来说基本类型中三种类型(number、boolean以及string)对应的装箱和拆箱。
拆箱和装箱
拆箱:将对象转换为基本类型值;
装箱:将基本类型值转换为对应的对象类型。
- 装箱
- 隐式装箱
上面的代码中,num(number类型)是没有toFixed这个方法的,这里引擎进行了装箱操作,将num转换为Number对象,再调用toFixed方法var num = 123; console.log(num.toFixed()); - 显式装箱
// Number var num = new Number(123); num.toFixed(); // 输出 '123' // String var str = new String(123); console.log(str); // 输出:String { '123' } // Boolean var boolean = new Boolean(null); console.log(boolean); // 输出:Boolean { false }
- 隐式装箱
- 拆箱
// number var num = new Number(123); var obj = { [num]: '122', } console.log(obj); // 输出:{ '123': '122'} // string var str = new String(123); var obj = { [str]: '123', } console.log(obj); // 输出: { '123': '123' } // Boolean var boolean = new Boolean(1); var obj = { [boolean]: '123', } console.log(obj); // 输出: { 'true': '123' } // symbol var dd = Symbol('werwe'); var obj = { [dd]: '123', } console.log(obj); // 输出:{"Symbol(werwe)": '123'}
判断JavaScript数据类型的方式。
- typeof
- instanceof
- Object.prototype.toString.call()
- constructor
隐式类型发生转换的场景以及转换原则
- 发生的场景
- 基本运算:加减乘除
- 相等运算符:==
- 转换原则
-
ToPrimitive转换
一般发生在对象转换为基础类型。这个过程的转换过程,取决于ToPrimitive的第二个参数。第二个参数的默认值为Number(另一个可选值为String)。如果为Number,则会按照下图流程进行转换;如果为String,则只是toString先调用。
-
ToNumber
参数 值 undefined NaN null 0 boolean 真 转换为 1,假转换为 0 字符串 数字或NaN 对象 ToPrimitive转换得到基础类型值,再调用ToNumber进行转换 -
ToString
参数 值 undefined 'undefined' null 'null' boolean 真 转换为 'true',假转换为 'false' 数字 对应数字的字符串形式 对象 ToPrimitive转换得到基础类型值,再调用ToString进行转换
-
-------------------------------- 完---------------------------------------