失效链接处理 |
前端小册子-JS知识点总结 PDF 下载
本站整理下载:
相关截图:
![]()
主要内容:
JS 基础知识点及常考⾯试题 (⼀) JS 对于每位前端开发都是必备技能,在⼩册中我们也会有多个章节 去讲述这部分的知识。⾸先我们先来熟悉下 JS 的⼀些常考和容易混 乱的基础知识点。 原始(Primitive)类型 涉及⾯试题:原始类型有哪⼏种?null 是对象嘛? 在 JS 中,存在着 6 种原始值,分别是: boolean null undefined number string symbol ⾸先原始类型存储的都是值,是没有函数可以调⽤的,⽐如 undefined.toString() 此时你肯定会有疑问,这不对呀,明明 '1'.toString() 是可以使 ⽤的。其实在这种情况下,'1' 已经不是原始类型了,⽽是被强制 转换成了 String 类型也就是对象类型,所以可以调⽤ toString 函数。 除了会在必要的情况下强转类型以外,原始类型还有⼀些坑。
其中 JS 的 number 类型是浮点类型的,在使⽤中会遇到某些 Bug, ⽐如 0.1 + 0.2 !== 0.3,但是这⼀块的内容会在进阶部分讲 到。string 类型是不可变的,⽆论你在 string 类型上调⽤何种 ⽅法,都不会对值有改变。 另外对于 null 来说,很多⼈会认为他是个对象类型,其实这是错误 的。虽然 typeof null 会输出 object,但是这只是 JS 存在的⼀ 个悠久 Bug。在 JS 的最初版本中使⽤的是 32 位系统,为了性能考 虑使⽤低位存储变量的类型信息,000 开头代表是对象,然⽽ null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类 型判断代码已经改变了,但是对于这个 Bug 却是⼀直流传下来。 对象(Object)类型 涉及⾯试题:对象类型和原始类型的不同之处?函数参数是对象会 发⽣什么问题? 在 JS 中,除了原始类型那么其他的都是对象类型了。对象类型和原 始类型不同的是,原始类型存储的是值,对象类型存储的是地址(指 针)。当你创建了⼀个对象类型的时候,计算机会在内存中帮我们开 辟⼀个空间来存放值,但是我们需要找到这个空间,这个空间会拥有 ⼀个地址(指针)。 const a = [] 对于常量 a 来说,假设内存地址(指针)为 #001,那么在地址 #001 的位置存放了值 [],常量 a 存放了地址(指针) #001,再 看以下代码 const a = [] const b = a b.push(1)
当我们将变量赋值给另外⼀个变量时,复制的是原本变量的地址(指 针),也就是说当前变量 b 存放的地址(指针)也是 #001,当我们 进⾏数据修改的时候,就会修改存放在地址(指针) #001 上的值, 也就导致了两个变量的值都发⽣了改变。 接下来我们来看函数参数是对象的情况 function test(person) { person.age = 26 person = { name: 'yyy', age: 30 }return person }const p1 = { name: 'yck', age: 25 }const p2 = test(p1) console.log(p1) // -> ? console.log(p2) // -> ? 对于以上代码,你是否能正确的写出结果呢?接下来让我为你解析⼀ 番: ⾸先,函数传参是传递对象指针的副本 到函数内部修改参数的属性这步,我相信⼤家都知道,当前 p1 的值也被修改了 但是当我们重新为 person 分配了⼀个对象时就出现了分歧, 请看下图
所以最后 person 拥有了⼀个新的地址(指针),也就和 p1 没有任 何关系了,导致了最终两个变量的值是不相同的。 typeof vs instanceof 涉及⾯试题:typeof 是否能正确判断类型?instanceof 能正确 判断对象的原理是什么? typeof 对于原始类型来说,除了 null 都可以显示正确的类型 typeof 1 // 'number' typeof '1' // 'string' typeof undefined // 'undefined' typeof true // 'boolean' typeof Symbol() // 'symbol' typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型 typeof [] // 'object' typeof {} // 'object' typeof console.log // 'function' 如果我们想判断⼀个对象的正确类型,这时候可以考虑使⽤ instanceof,因为内部机制是通过原型链来判断的,在后⾯的章节 中我们也会⾃⼰去实现⼀个 instanceof。
|