JavaScript相关面试题
实现一个水仙花数
for (var i = 100; i < 999; i++) {
var a = parseInt(i / 100);
var b = parseInt(i / 100 % 10)
var c = parseInt(i % 10)
if (a ** 3 + b ** 3 + c ** 3 === i) {
console.log(i + '是三次次幂数')
}
}
说一下JavaScript的数据类型有哪些?
- 基本数据类型:String,Number,Boolean,undefined,Null,Symbol
- 引用数据类型:Object,Date,Array,Math,Map,Set Function
- 区别:基本数据类型是存储于栈内存中,引用数据类型是存储于堆内存中
type 和 instanceof 的区别?
- type 能判断所有值类型,函数,不可对 null、对象、数组 进行精确的判断,因为返回的都是 object
- instanceof 能判断对象类型,不能判断基本数据类型,其内部运行机制是判断在其原型中能否找到该类型的原型
|| 和 && 操作符的返回值?
- || 和 && 首先会对第一个操作数执行条件判断,如果其不是布尔值就先强制转换为布尔类型,然后再执行条件判断
- 对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的值,如果为 false 就返回第二个操作数的值
- && 则相反,如果条件判断结果为 true 就返回第二个操作数的值,如果为 false 就返回第一个操作数的值
实现一个冒泡排序 and 选择排序
var arr = [9, 2, 3, 4, 6, 5, 8, 7];
// 冒泡排序
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 选择排序
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
实现一个数组的逆序
var arr = [1, 3, 5, ,6];
function Reverses(arr) {
if (arr instanceof Array) {
for (var i = 0; i < arr.length / 2; i++) {
var temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
return arr;
}else {
return 'Error';
}
}
console.log(Reverses(arr));
实现数组去重
说说数组中常用的方法有哪些?
实现实现5个不同的随机数
document.write()、element.innerHTML()、document.createElement() 区别?
-
- document.write() 是直接内容写入页面的内容流,是需要等待页面加载完毕后才会执行,会导致页面重绘
-
- element.innerHTML() 是将内容写入某个DOM节点,不会导致页面的重绘,它在创建多个元素情况下 使用数组形式的情况下性能更高
-
- element.createElement() 创建多个元素的效率会底一点点,但是他的结构足够的清晰
什么是事件冒泡和事件捕获?
- 事件冒泡:IE 最早提出的,事件开始时由最具体的元素接收,然后逐级向上传播到 DOM 最顶层节点的过程
- 事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐级向下传播到最具体的元素接收过程
说说 this 指向的问题?
- this 指向问题,一般情况下,this 最终指向的是那个调用它的对象
- 全局作用域下,或普通函数中 this 指向的是全局对象 window【注意:定时器里 this 指向的是 window】
什么是同步和异步以及宏任务和微任务?
什么是防抖和节流,以及如何实现?

浙公网安备 33010602011771号