阅读前重要提示:
本文非百科全书,只专为面试复习准备、查漏补缺、深入某知识点的引子、了解相关面试题等准备 。
https://github.com/KieSun/fucking-frontend
笔者一直都是崇尚学会面试题底下涉及到的知识点,而不是刷一大堆面试题,结果变了个题型就不会的那种 。所以本文和别的面经不一样,旨在提炼面试题底下的常用知识点,而不是甩一大堆面试题给各位看官 。
数据类型JS 数据类型分为两大类,九个数据类型:
- 原始类型
- 对象类型
- boolean
- number
- string
- undefined
- null
- symbol
- bigint
- Object
- Function
原始类型存储在栈上,对象类型存储在堆上,但是它的引用地址还是存在栈上 。
注意:以上结论前半句是不准确的,更准确的内容我会在闭包章节里说明 。
常见考点
- JS 类型有哪些?
- 大数相加、相乘算法题,可以直接使用 bigint,当然再加上字符串的处理会更好 。
- NaN 如何判断
function test(person) {person.age = 26person = {}return person}const p1 = {age: 25}
这类题目我们只需要牢记以下几点:- 对象存储的是引用地址,传来传去、赋值给别人那都是在传递值(存在栈上的那个内容),别人一旦修改对象里的属性,大家都被修改了 。
- 但是一旦对象被重新赋值了,只要不是原对象被重新赋值,那么就永远不会修改原对象 。
typeof原始类型中除了 null,其它类型都可以通过 typeof 来判断 。
typeof null 的值为 object,这是因为一个久远的 Bug,没有细究的必要,了解即可 。如果想具体判断 null 类型的话直接 xxx === null 即可 。
对于对象类型来说,typeof 只能具体判断函数的类型为 function,其它均为 object 。
instanceofinstanceof 内部通过原型链的方式来判断是否为构建函数的实例,常用于判断具体的对象类型 。
[] instanceof Array
都说 instanceof 只能判断对象类型,其实这个说法是不准确的,我们是可以通过 hake 的方式得以实现,虽然不会有人这样去玩吧 。class CheckIsNumber {static [Symbol.hasInstance](number) {return typeof number === 'number'}}// true1 instanceof CheckIsNumber
另外其实我们还可以直接通过构建函数来判断类型:// true[].constructor === Array
Object.prototype.toString前几种方式或多或少都存在一些缺陷,Object.prototype.toString 综合来看是最佳选择,能判断的类型最完整 。上图是一部分类型判断,更多的就不列举了,[object XXX] 中的 XXX 就是判断出来的类型 。
isXXX API同时还存在一些判断特定类型的 API,选了两个常见的:
常见考点
- JS 类型如何判断,有哪几种方式可用
- instanceof 原理
- 手写 instanceof
强制转换强制转换就是转成特定的类型:
Number(false) // -> 0Number('1') // -> 1Number('zb') // -> NaN(1).toString() // '1'
这部分是日常常用的内容,就不具体展开说了,主要记住强制转数字和布尔值的规则就行 。转布尔值规则:
- undefined、null、false、NaN、''、0、-0 都转为 false 。
- 其他所有值都转为 true,包括所有对象 。
- true 为 1,false 为 0
- null 为 0,undefined 为 NaN,symbol 报错
- 字符串看内容,如果是数字或者进制值就正常转,否则就 NaN
- 对象的规则隐式转换再讲
推荐阅读
- 不爱跳槽的程序员集中在8-17k,揭晓中国开发者的真实现状
- 大型Git仓库的部分克隆
- 数据仓库、数据集市、数据湖、数据中台这些概念,终于整明白了
- 银行数据仓库的系统架构是什么?看这篇足矣
- 数据仓库构建流程
- 长安|性价比超宏光MINI!长安奔奔E-Star国民版暂停收取订单:产能受限
- 数据仓库组件:Hive环境搭建和基础用法
- 10分钟自建企业级Docker镜像仓库!这个开源项目太顶了
- 一文带你搭建本地YUM仓库
- 开发框架搭建考量