js基础教程(一)


数据类型

  • 基本数据类型:

ES5的5种:Null,undefined,Boolean,Number,String, ES6新增:
Symbol表示独一无二的值 ES10新增:BigInt 表示任意大的整数

  • 引用数据类型

引用数据类型: Object,包含Object、Array、 function、Date、RegExp。


数据类型存储

基本数据类型和引用数据类型

  • 基本数据类型:直接存储在栈内存中,占据空间小,大小固定,属于被频繁使用的数据;
  • 引用数据类型:同时存储在栈内存与堆内存中,占据空间大,大小不固定;
  • 引用数据类型将指针存在栈中,将值存在堆中;当把对象值赋值给另外一个变量时,复制的是对象的指针,指向同一块内存地址;变量中保存的实际上只是一个指针,这个指针指向内存堆中实际的值。

堆和栈区别

  • 栈: 是一种连续储存的数据结构,具有先进后出后进先出的性质;
    通常的操作有入栈(压栈),出栈和栈顶元素。想要读取栈中的某个元素,就是将其之间的所有元素出栈才能完成。
  • 堆: 是一种非连续的树形储存数据结构,具有队列优先,先进先出;
    每个节点有一个值,整棵树是经过排序的。特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。常用来实现优先队列,存取随意。

数据类型转换

  • 转换为数字(调用Number(),parseInt(),parseFloat()方法)
  • 转换为字符串(调用.toString()或String()方法)
  • 转换为布尔值(调用Boolean()方法) 还有隐式转换
    注意:null、undefined 没有.toString方法

数据类型相比较 =====

=== 属于严格判断,直接判断两者类型是否相同,如果两边的类型不一致时,不会做强制类型转换,不同则返回false,如果相同再比较大小,不会进行任何隐式转换;对于引用类型来说,比较的都是引用内存地址,所以===这种方式的比较,除非两者存储的内存地址相同才相等,反之false

== 判断操作符两边对象或值是否相等,类型可以不同,如果两边的类型不一致,则会进行强制类型转化后再进行比较,使用Number()转换成Number类型在进行判断。例外判断null==undefinednull/undefined进行运算时不进行隐式类型转换。通常把值转为Boolean值,进行条件判断。Boolean(null)===Boolean(undefined)>false===false 结果为true

深拷贝和浅拷贝

浅拷贝

  • 将原对象或原数组的引用直接赋给新对象、新数组,新对象只是对原对象的一个引用,而不复制对象本身,新旧对象还是共享同一块内存;
  • 如果属性是基本数据类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址;

深拷贝

  • 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
  • 深拷贝就是把一个对象,从内存中完整的拷贝出来,从堆内存中开辟了新区域,用来存新对象,并且修改新对象不会影响原对象;

浅拷贝的实现方式:

1、object.assign()
2、lodash 里面的 _.clone
3、…扩展运算符
4、 Array.prototype.concat
5、 Array.prototype.slice

深拷贝的实现方式:

1、 JSON.parse(JSON.stringify())
2、递归操作
3、cloneDeep
4、Jquery.extend()

防抖和节流

  • 防抖
    所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

  • 节流
    所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。两种方式可以实现,分别是时间戳版和定时器版。

箭头函数和普通函数的区别

1.this指向不同,普通函数是谁调用,this指向谁
2.箭头函数是在哪里定义函数,this指向谁;

闭包

闭包:函数嵌套函数,内部函数就是闭包;
正常情况下,函数执行完成,内部变量会销毁(释放内存空间);
内部函数没有执行完成,外部函数变量不会被销毁

猜你喜欢

转载自blog.csdn.net/hjw15910531612/article/details/126859959