JS 面试题汇总

14 篇文章 0 订阅
12 篇文章 0 订阅

JS 面试题汇总
1.  字符串拼接的方法
①使用加法运算符“+”
②使用模板字符串,以反引号(`)标识
③使用concat()方法连接,不会修改原数组
④使用数组的join()方法

2. 变量声明提升
变量声明提升就是可以使用一个稍后才声明的变量,而不会引发异常。变量声明提升时,只提升变量的定义,不会提升变量的值。

3. 数据类型
(1)基本数据类型(值类型)
Number、string、Boolean、undefined、null
(2)引用数据类型
数组、对象、函数、RegExp、Data、map、set等。
两者区别:当变量传值时,基本类型值在内存中产生新的副本,而引用类型值在内存中不产生新的副本,而是让新变量指向同一个 对象;当用“==”比较时,基本类型中比较值是否相等,而引用类型值比较内存地址是否相同。

4. NaN的理解
是英语“not  a  number”的意思,即不是一个数,但它是一个数字类型的值,它的性质是不自等。

5.  0.1+0.2!=0.3的原因
JS使用的是IEEE745二进制浮点数算数标准,这会使一些个别的小数运算产生“丢失精度”的问题。解决方法:在进行小数运算时,要调用数字的toFixed()方法,保留指定小数的位数,再转为数字。

6. Break与continue 的区别
Break表示立即终止循环,它只能用在循环语句中,在for循环和while循环中都可以使用,用在while语句中,通常和while(true){}死循环搭配使用;
Continue用于跳过循环中的一个迭代,并继续执行循环中的下一个迭代。For循环更经常使用continue。

7. Indexof()和includes()方法的区别
Indexof()方法的功能是搜索数组中的元素,并返回它所在的首个索引号,如果元素不存在,则返回-1;
includes()方法用来判断一个数组是否包含一个指定的值,返回布尔值。
这两个方法都是使用“===”判断数组中的元素是否存在。

8. 数组的常用方法中哪些方法改变原数组,哪些方法不改变原数组吗?
(1)改变原数组的方法:
push()方法,在数组尾部插入新项;
pop()方法,在数组尾部进行删除;
unshift(),在数组的头部插入新项;
shift(),在数组头部进行删除;
splice(),替换数组中的指定项;
reverse(),将数组中所有项的顺序置反
(2)不改变原数组的方法:
slice(),截取子数组;
join(),将数组转为字符串;
concat(),合并连接多个数组;
Indexof()和includes()方法;

9. 闭包
含义:闭包是函数本身和该函数声明时所处的坏境状态的组合。每次创建函数时都会创建闭包。
闭包是作用域应用的特殊情况,有两种表现:
函数作为参数被传递;函数作为返回值被返回。
闭包的优点:记忆性、模拟私有变量。
记忆性:当闭包产生时,函数所处环境的状态会始终保持在内存中,不会在外层函数调用后被自动清除。
模拟私有变量:通过内部函数返回外部函数变量的方式扩大变量的作用范围,避免全局变量污染。
缺点:不能滥用闭包,否则会造成网页的性能问题,严重时可能会导致内存泄漏。所谓内存泄漏是指程序中已动态分配的内存由于某种原因为释放或无法释放。
应用场景:封闭作用域,函数节流,作用域链,参数传递,延长局部变量的生命等。

10. 作用域有哪些?作用域链?
作用域有函数作用域、全局作用域、块级作用域(es6新增)。
(内层)块级作用域<(外层)函数作用域<……<全局作用域,从内向外依次寻找。Js中所有变量都有作用域,作用域就是代码的执行环境,例如:全局执行环境就是全局作用域。访问一个变量/常量的值,若在当前作用域中没有查到,就会向上级作用域中查找,一直查找到全局作用域,这么一个查找过程形成的链条就叫做作用域链。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值