JS基础

作者: 欢西西西 | 来源:发表于2023-01-21 22:18 被阅读0次

1. var、let、const

  • var:有变量提升,无块级作用域
  • let:不能重复声明,有块级作用域
  • const:不能重复声明,有块级作用域,声明时必须设置初始值,并且之后不能修改
image.png

2. 数据类型

- 基本数据类型 引用数据类型
- String、Number、Boolean、null、undefined、Symbol、bigInt Object
- 值存储在栈内存中 栈内存中存的指针,实际值存在堆内存中
- - -

2.1 堆和栈的区别

  • 栈为系统分配,获得的空间较小;堆为人为申请开辟,空间更大;
  • 栈是连续的空间,而堆是不连续的空间
  • 栈比堆运行速度快

2.2 null和undefined

  • undefined ,字面意思是“未定义的值”,一般都来自于某个表达式最原始的状态值,不是人为操作的结果
  • null 的字面意思是:空值 。一个对象被人为的重置为空对象

2.3 bigInt

2.4 Symbol

image.png
  • Object.keys()只能获取到key为String类型并且enumerable为true的属性,获取Symbol类型的key要用Object.getOwnPropertySymbols()

    image.png
  • 可以用来保护对象的一些属性,防止被随意修改,或者属性直接被覆盖。

2.5

image

3. for-of 可以用来迭代哪些对象

  • 可迭代的对象,比如Array、arguments
  • const isIterable = obj => obj != null && typeof obj[Symbol.iterator] === 'function';来判断对象是否可迭代

3.1 for-of 和 for-in的区别

  • 不能用for-of迭代普通对象,比如{ name: 'huhu' },因为普通对象的 [Symbol.iterator]是undefined
  • 日常开发就用for-of迭代数组,迭代出value,用for-in迭代普通对象,迭代出key

4. 类数组与数组

最本质的区别是:类数组是一个简单对象,和数组的原型关系不同,所以类数组无法调用数组的方法。要使用可以先Array.from(arrayLike)转换成数组

简单对象.png

5. 箭头函数和普通函数的比较

  • 箭头函数简化代码
  • 箭头函数没有自己的this和arguments。this指向的是定义时外层函数的this指向,而且无法被call方法修改。没有arguments可以使用扩展运算符来获取参数列表
  • 箭头函数不能用来做构造函数,因为没有this和原型prototype

6. Set/WeakSet/Map/WeakMap

  • Set 是不重复的值的集合

  • WeakSet 只能是对象的集合
  • WeakSet 持弱引用: 如果一个变量引用一个对象,那这个对象不会被回收。但是如果这个对象的只剩下weakSet中在引用它,那么它会被当成垃圾回收。
  • WeakSet不能被遍历:因为垃圾回收节点是不确定的,回收前后的weakSet可能是不同的

  • Map 存放key-value结构的数据,跟对象的不同是:Map的key可以是任何类型,而对象的key只能是String或者Symbol

  • WeakMap的key只能是对象类型
  • WeakMap 持有的是每个key对象的“弱引用”

使用场景

  • WeakSet存放dom元素

  • 在Vue3中的使用
    ① 做数据响应式时,proxyMap(WeakMap类型)存放原对象和它的代理对象:proxyMap = new WeakMap(); proxyMap.set(target, proxy)
    ② 为对象收集依赖时,将依赖收集到bucket(WeakMap类型)里:key为原对象,value是一个Map类型,它的key为对象的各属性名,value为Set类型,存属性对应的effect函数

    image.png
  • babel在编译class的私有属性时就使用了WeakMap,保存每个实例以及这个实例对应的私有属性值


    image.png

7. js中的对象

image.png

8. 面向对象的3个特征

封装:隐藏实现细节,使得代码模块化
继承:扩展已经存在的类,目的:代码复用
多态:同类事物,调用相同接口时的表现不同

9. 数字每满千位加逗号

  • 方法1 toLocaleString()

    image.png
  • 方法2:整数部分使用正则:num.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1,')

10. 数据类型隐式转换

10.1 加法

一边有字符串.png 没有字符串.png

10.2 加法之外的

空数组的转换.png image.png

10.3 ==

image.png image.png

10.4 > <

image.png image.png

11. 创建函数的几种方法

function foo() {} // 函数声明
const foo = function() {} // 函数表达式
const foo = () => {} // 箭头函数
const obj = {
  foo() {} // 作为对象的方法
}

12. typeof 和 instanceof 区别

typeof 检查的是数据的基础类型

  • 返回值为string、number、boolean、undefined、object、symbol、bigInt、function 8种(跟js数据类型相比:少了null,多了funciton)
  • typeof null // 'object'

instanceof 检测的是实例的原型链上是否包含某个构造函数的prototype

  • 返回的是一个布尔值
  • mycat instanceof Animal

13. 数组扁平化除了用递归还能怎么做?

  • Array.prototype.flat方法,入参表示层级,不传默认为1,不确定的层级传Infinity

14. 如何能拿到匿名函数的引用?

arguments.callee

function test() {
  console.log(arguments.callee === test) // true
}

相关文章

  • React-Native 随笔

    学习基础: js的基础知识, rect.js基础 JSX语法基础 FlexBox布局 安装 安装node.js下载...

  • 最新web前端相关课程学习链接

    js基础篇 js进阶篇 js高级篇 vue基础篇 vue高级篇 react基础 react高级 Nodejs基础 ...

  • web前端 -- Day23 js高级

    js基础 JavaScript简称:JS JS分三个部分: ECMAScript标准---基础的语法 DOM D...

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • 4/07day28_js基础

    day28_js基础 回顾 JS基础语法 JS运算符 JS流程控制语句 条件语句 JS的条件语句和Java语法基本...

  • 2018-12-20

    1.01.尚硅谷_JS基础_JS简介(1) 10.10.尚硅谷_JS基础_Null和Undefined(10) 1...

  • JS基础和WebAPIs的关联性

    学习ECMAscript标准规定的基本语法掌握JS基础语法只学习JS基础做不了网页交互效果学习JS基础语法是为了后...

  • 2019-07-27 前端面试题

    1.js的基础类型 js的基础类型包括 Undefined , Null , String ,Number ,...

  • 网络编程(十九) JavaScript(9)

    一、 JS的组成 1.1 JS基础阶段以及Web APIs阶段 【1】JS基础阶段 我们学习的生死ECMAScri...

  • 发现•分享—2019-01-17

    文章 JS JS 异步编程六种方案 JS基础—原型对象的那些事(一) JS基础—原型对象的那些事(二) CSS 综...

网友评论

      本文标题:JS基础

      本文链接:https://www.haomeiwen.com/subject/xtwhhdtx.html