js知识汇总

1. JavaScript的数据类型都有什么?

基本数据类型:Number、String、Boolean、Null、Undefined
复杂数据类型:Object(Function、Array、Date、RegExp

2. 什么是变量提升?

变量提升是当栈内存作用域形成时,JS代码执行前,浏览器会将带有var, function关键字的变量提前进行声明(值默认就是 undefined),定义 (就是赋值操作),这种预先处理的机制就叫做变量提升机制也叫预定义。

3.带 var 和不带 var 的区别?

(1)全局作用域中不带var声明变量虽然也可以但是建议带上 var声明变量,不带 var 的相当于给window对象设置一个属性罢了。
(2)私有作用域(函数作用域),带 var 的是私有变量。不带 var 的是会向上级作用域查找,如果上级作用域也没有那么就一直找到 window 为止,这个查找过程叫作用域链。
全局作用域中使用 var 申明的变量会映射到 window 下成为属性。

4.js 中的 堆栈

堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区;
(1)(heap)用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象;它是运行时动态分配内存的,因此存取速度较慢。
(2)(stack)中主要存放一些基本类型的变量和对象的引用,(包含池,池存放常量),其优势是存取速度比堆要快,并且栈内的数据可以共享,但缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性

5.作用域

(1)作用域是指程序源代码中定义变量的区域。也就是程序可以生效并运行的空间。
(2)全局作用域是指变量可以在当前脚本的任意位置访问,拥有全局作用域的变量也被称为“全局变量”
(3)在函数内部声明的变量具有局部作用域,拥有局部作用域的变量也被称为“局部变量”,局部变量只能在其作用域中(函数内部)使用

6.js检测数据类型四种办法

(1)typeof对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用的
(2)instanceof可以用来判断数组和对象,但不能用于基础数据类型。
(3)constructor来判断数据的类型,但是除了null、undefined,因为他们不是由对象构建。
(4)Object.prototype.toString.call():任何类型都可以精准检测出来

7.闭包

(1)内部函数可以访问外部函数的值,该值会长期存储在内存中,因此产生了闭包
(2)闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。 直观的说就是形成一个不销毁的栈环境, 闭包实现了传递值和功能的调用。
(3)优点:避免变量污染全局,变量的叠加使用
(4)缺点:因为常驻内存,如果有大量闭包不被释放,容易造成内存溢出

8.递归

(1)程序自我调用,简单理解就是函数自己调用自己。目的是为了处理不确定层级的相同数据结构的数据处理。
(2)优点:代码更简洁清晰,可读性更好;
缺点:时间和空间消耗比较大、很多计算都是重复的、调用栈可能会溢出

9.浅拷贝和深拷贝

(1)浅拷贝只是拷贝一层,对更深层次对象级别的只拷贝引用(地址)
(2)深拷贝拷贝多层,每一级别的数据都会拷贝
(3)Object.assign(target,...sources) es6新增方法可以浅拷贝
(4)JSON.parse(JSON.stringify(obj)) 可以实现暴力深拷贝
(5)一般深拷贝使用递归去实现

11. 字符串常用方法

(1)获取字符串长度:length
(2)获取字符串指定位置的值:charAt() 方法获取到的是指定位置的字符
(3)查询是否包含某字符:indexOf、lastIndexOf、includes、search。
(4)字符串拼接:出了使用+号,应该使用concat
(5)字符串分割成数组:split
(6)截取字符串:
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值