★★★★ 说说你对 JavaScript 的作用域的理解。什么是作用域链?
★★★ 对闭包的看法,为什么要用闭包?说一下闭包的原理以及应用场景?闭包的 this 指向问题?
★★★ 如何确定 this 指向?改变 this 指向的方式有哪些?
★★★ async 和 await 、promise的区别 和 这两个的本质
★★★ 移动端点击事件 300ms 延迟如何去掉?原因是什么?
★★★ Cookie 有哪些属性?其中HttpOnly,Secure,Expire分别有什么作用?
★★★★ 如何实现函数的柯里化?比如 add(1)(2)(3)
★★ 将 [1,2] 与 [3,[4]] 合并为 [1,2,3,[4]]
★★ Array.forEach() 与 Array.map() 的区别,Array.slice() 与 Array.splice() 的区别?
★★ Promise.resolve(Promise.resolve(1)).then(console.log) 输出?
★★★ document load 和 documen ready的区别
★★★ 如何用 setTImeout 来实现 setInterval?
★★★ 如何判断 user 对象里有没有 a 这个属性?如果把user对象中所有的属性都输出出来?[这里是代码001]
★★ 使用 setTimeout 模拟 setInterval 的功能做一个60秒的倒数计时
★★★ 实现一个函数 add(),运算结果可以满足如下预期结果
add(1)(2) //3
add(1,2,3)(10) //16
add(1)(2)(3,4)(5) //15
★★ 写一个 function,清除字符串前后的空格。(兼容所有的浏览器)
★★ JavaScript 中 callee 和 caller 的作用
★★★ jQuery 的事件委托方法 on,live,delegate之间有区别?
★★★ 请编写获取当前窗口地址中查询参数name的值,当前窗口地址为:https://foo.com/?id=1&name=tom
★★★ 已知a,b两个构造函数,现在 let c = new a(),如何在c的存储地址不变的情况下,改变c的继承(c->a 转为 c->b)
★★★ 写一个函数,接受可变个数参数,且每个参数均为数字,返回参数的最大值。
★★★ 实现一个函数 clone,可以对 JavaScript 中的5种主要数据类型进行值复制。
★★★ 假如A页面我定义了一个定时器,然后跳到B页面如果让A页面的定时器暂停
★★★ promise的实现原理,如果我现在向服务器发送一个请求,但是我后悔了,不想让服务器返回数据,去实现一个delay
★★★ CommonJS 和 RequireJS 的实现原理
★★★★★ 函数节流、防抖。scroll resize 使用函数节流实现不要频繁触发事件的需求。
★★★ swiper 插件从后台获取数据没问题,css 代码啥的也没问题,但是图片不动,应该怎么解决?
★★★ ES6 class 关键字原理跟 function 什么区别?
★★★ require.js 源码看过吗?怎么做到异步加载的
★★ jQuery,$() 能传什么参数? html 代码怎么解析? 传 function 呢?
★★★ 0.1+0.2 等不等于 0.3?自己封装一个让他们相等的方法
★★★ super() 是否必须执行?不执行怎么让它不报错?
★★ for-in 循环会遍历出原型上的属性吗?怎么避免遍历到原型上的属性
★★★ 简述call、apply、bind,call 和 apply哪个性能更好?
★★★ Promise 避免回调地狱的语法糖–实现链式调用的核心点是什么?
★★ import export commonJS 对比区别
★★★ 你知道 ES6 中的 Generator 和 yiled 吗?在实际开发中使用过吗?
★★★ Cookie、storage 的区别?什么时候使用?
★★★ map、fillter、reduce 各自有什么作用?
★★ new 的原理是什么?通过 new 的方式创建对象和通过字面量创建有什么区别?
★★★ promise 常见方法和 all 和 race的应用场景
★★★★ 你知道什么是原型吗?我们为什么要用原型呢?或者说原型为我们提供了什么?
★★★ 你了解原型链吗 你能说说 prototype 与?proto?的区别吗?
★★ 为什么 await 在 forEach 中不生效?如何解决?
★★ 请描述一下 cookies,sessionStorage 和 localStorage 的区别?
JavaScript面试真题
1. ★★ 介绍一下JS的内置类型有哪些?
1. 空类型:null
2. 未定义:undefined
3. 布尔:boolean
4. 数字:number
5. 字符串:string
6. 符号:symbol(ES6新增)
7. 对象:object
除了对象之外,其他为基本类型.
2. ★★★★ 介绍一下 typeof 区分类型的原理
typeof原理: 不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位存储其类型信息。
000: 对象
010: 浮点数
100:字符串
110: 布尔
1: 整数
/*----------------------------------------------*/
typeof null 为"object", 原因是因为 不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位都为0的话会被判断为Object类型,null的二进制表示全为0,自然前三位也是0,所以执行typeof时会返回"object"
3. ★★★ 介绍一下类型转换
/*-------------------显式转换---------------------*/
1. toString() // 转化为字符串,不可以转null和underfined
2. Number() // 转换为数字,字符串中有一个不是数值的字符,返回NaN
3. parseInt() // 转换为数字,第一个字符不是数字或者符号就返回NaN
4. String() // 转换为字符串,
5. Boolean() // 转换为布尔值
/*-------------------隐式转换(+-)---------------------*/
当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型
1. num + "" -> String
2. num + bool -> num
// 当加号运算符时,String和其他类型时,其他类型都会转为 String;其他情况,都转化为Number类型
3. string - num -> num
// 其他运算符时, 基本类型都转换为 Number,String类型的带有字符的比如:
4. 'a1' - num -> NaN
// 与undefined 一样。
/*-------------------隐式转换(逻辑表达式)---------------------*/
1. 对象和布尔值比较
对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
2. 对象和字符串比较
对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
3. 对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
4. 字符串和数字比较
字符串和数字进行比较时,字符串转换成数字,二者再比较。
'1' == 1 // true
5. 字符串和布尔值比较
字符串和布尔值进行比较时,二者全部转换成数值再比较。
'1' == true; // true
6. 布尔值和数字比较
布尔值和数字进行比较时,布尔转换为数字,二者比较。
true == 1 // true
4. ★★★★ 说说你对 JavaScript 的作用域的理解。什么是作用域链?
在 JavaScript 中有两种作用域类型:
1. 局部作用域:只能在函数内部访问它们
2. 全局作用域:网页的所有脚本和函数都能够访问它
JavaScript 拥有函数作用域:每个函数创建一个新的作用域。
作用域决