面试题
1. js中使用 typeof 能得到的类型有哪些
简答:
undefined、string、number、boolean、object、function
就这么样就结束了吗?
解析:
1 | // 数据类型有哪些? |
之前:
六大数据类型
- 基本数据类型(简单数据类型)
- number 数值型(NaN)
- string 字符串
- boolean 布尔型
- undefined 未定义
- null 空引用
- 引用数据类型(复杂数据类型)
- object
百度:
1 | Null类型是第二个只有一个值的数据类型,这个特殊的值是null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值会返回“object”的原因,如下面的例子所示: |
2. 何时使用 === 何时使用 ==
简答:
当仅需要比较值是否相等时,用==;
当需要比较类型和值时,用===。
就这么样就结束了吗?
解析:
1 | // 有何区别? |
####百度:
1 | 如果 x 或 y 中有一个为 NaN,则返回 false; |
3. js变量按照存储方式分为哪些类型,并描述其特点
简答:
简单数据类型、复杂数据类型(值、引用)。
值类型:简单类型, 变量在存储简单类型的时候,存储的是值本身。
引用类型:复杂类型,变量在存储复杂类型的时候,只会存储这个对象的地址,并不会存储对象的值。
???
解析:
1 | //简单类型(值类型) |
4. 数组的常用api有哪些
简答:
push() 、pop() 、unshift() 、shift();
es6:filter()、 forEach()、 some() 、every() 、map()等
???
解析:
1 | // push() pop() unshift() shift() |
5. 如何准确判断一个变量是数组类型
简答:
可以通过 instanceof
来判断, 用arr instanceof Array;
。
???
解析:
1 | // instanceof 操作符 |
之前:
js基础阶段对instanceof作用的描述 : 判断一个对象是否是某个构造函数的实例
现在我们学习了原型,也学习了原型链,所以我们现在可以更严谨的描述他的作用:
判断一个函数的原型对象,是否在实例对象的原型链上
6. 描述 new 一个对象的过程
简答:
1 | 1. 创建一个对象; |
???(这次还说吗?)
7. 说一下变量提升的理解?
简答:
- 变量定义、函数声明提升(同名提升问题)
- 因为在es6之前没有块级作用域,早起提出一个预解析的方案,但是实际使用的时候,并没有想的那么好。
- es6中的let和const可以拥有块级作用域。
解析:
- 声明提升
1 | // 1.变量提升 |
- 作用域(es6中的let和const)
1 | //es6之前 |
8. 说明 this 几种不同的使用场景?
简答:
构造函数(new出来的过程)、对象方法、普通函数、借用方法模式(上下文调用模式)
解析:
1 | // this的指向要在函数执行的时候才能确定,函数定义时是无法确认(就是只看函数是如何被调用的,而不看函数是如何定义的) |
9. 如何理解作用域?
简答:
- es6之前的作用域只有全局作用域和函数作用域(词法作用域)
- es6出现了块级作用域({})
- 作用域出现是历史原因
解析:
1 | //es6之前 |
10. 实际开发中闭包的应用?
简答:
- 私有化数据。
- 数据保持。
解析:
1 | function main(){ |
缺点:
由于内部的函数使用了外部函数的变量,导致外部这个函数无法被回收掉.如果代码中大量的存在闭包,可能会导致内存泄露 (不要刻意使用闭包)。
笔试题
1.打印结果是什么?
1 | console.log(1); |
2. 打印结果是什么?
1 | function add(x, y) { |
3.打印结果是什么?
1 | // 1. |
##4. 结果是什么?
1 | // 1、考察原型链 |
5. 统计一个字符串中每个字符出现的次数
1 | var str = 'asdfssaaasasasasaa'; |
6. 获取随机数,要求是长度一致的字符串格式
1 | // Math.random() 生成[0,1)的随机数,小数点后面数值个数不定 |
7. 去掉一个数组的重复元素
1 | var arr = [1, 2, 3, 1, 43, 12, 12, 1, 2, 3, 4, 5]; |
8. 完成下列要求,函数返回扁平化后的数组如:[1, [2, [ [3, 4], 5], 6]] => [1, 2, 3, 4, 5, 6]。
1 | var arr = [1, [2, [ [3, 4], 5], 6]]; |
9.求数组中:最小的x坐标、最大的y坐标
1 | var arr = [ |