JS知识点整理

1、localstorage、sessionstorage、与 cookie 的区别?

  cookie:一般有服务器生成失效时间,如果是在浏览器端生成,cookie默认是关闭浏览器后失效,大小4kb,每次都会携带请求头。

  localStorage:除非清除否则永久保存,大小5MB,仅存在客户端,不参与通信

  sessionStorage:仅在当前会话下有效,关闭页面或者清除出浏览器后清除,大小5MB左右,仅在客户端保存,不参与通信

2、for..in  for..of  for..each 的区别

  for..in 适合遍历对象,遍历数组的索引

  for..of 是 ES6 的语法,只能遍历实现 Symbol.interator 的接口的对象,遍历的是数组内部的元素,不包括数组的原型属性 method 和索引 name

  for..each 是 ES5 的遍历数组,不能使用 break 和 return 结束并退出循环。

3、ES6 的新语法

  const 与 let 变量、解构赋值、for..of 循环、展开运算符、箭头函数和 this、Symbol、class、promise

4、const let 与 var 的区别

  var 声明变量会挂载到 window 上,存在变量提升

  let 和 const 声明形成块级作用域,块之外的访问会报错,不能变量提升,在声明之前访问会报错,不允许在同一级中重复声明

  let 声明变量,值和类型都可以改变,无限制

  const 声明常量,只读,修改值会报错,保存的是内存地址,可以给对象或数组添加属性或元素,不能重新复写。

5、ES6 中箭头函数 this 的指向

  全局调用的时候 this 代表全局对象

  作为对象方法调用的时候,this 指向这个上级对象,

  作为构造函数调用时,this 只想这个新对象

  apply 调用时,this 指向的是调用这个函数的一个参数。

6、对 Promise 的理解

  Promise 是异步编程的解决方案,Promise 是一个对象,从它可以获取到异步操作的消息,Promise 有三个状态,pending 等待状态、fulfilled 成功状态、rejected 失败状态。状态一旦更改,就不会再改变,创造 Promise 实例之后,就会立即执行。它有两个 API 方法: resolve 和 rejeck 方法,调用成功返回 resolve ,调用失败之后返回 rejeck,原型上又两个方法 .then 和 .chtch,在请求数据上 .then 是请求的数据,.chtch 捕获的错误异常。

7、原型,原型链的理解

  原型:每个对象都会在其内部初始化的一个属性,就是 prototype(原型),通俗的讲,原型就是一个模板,更准确的说是一个模板对象

  原型链:当我们访问一个对象的属性的时候,如果这个对象内部不存在这个属性,那么他就会去 prototype 里找这个属性,这个 prototype 又会有自己的 prototype ,于是就这样一直找下去,这也就是我们说的原型链的概念。通俗的讲,就是利用原型让一个引用类型继承另一个引用类型的属性和方法。(大白话版本:对象的原型指向父级,而父级的原型又指向父级的父级,像这样层层指向的关系,就叫做原型链。在查找一个对象的属性的时候,javascript 会向上遍历原型链,知道找到给定义名称的属性为止,当查找到原型顶部的时候,也就是 object.prototype(),仍然没有找到指定的属性,就会但返回 undefined。)

8、对闭包的理解

  闭包:就是可以读取其他函数内部变量的函数

  通俗的讲:函数a 和 内部函数b ,被函数a 外部的一个变量引用的时候,就创建了一个闭包。

  应用场景:函数封装的时候,使用定时器的时候

  闭包的用处:一是能够读取其他函数内部的变量,二是让这些变量值始终保持在内存中

  优缺点:

    优点:

      减少全局变量

      减少传递函数的参数量

      封装

    缺点:

      使用闭包会占用大量的内存,过多的使用闭包会导致内存溢出

  解决方案:就是把哪些不需要的变量,垃圾回收又收不走的哪些变量赋值为 null ,然后再让垃圾回收收走。

9、垃圾回收机制:

  如果一个对象不再被引用,那么这个对象就会被回收,如果两个对象相互被引用,而不在被第三者引用,那么这两个对象也会被回收,如果,对象a 被对象 b 引用,b 又被除了 a 以外 c 引用,那么 a 执行完以后就不会被回收。

10、ES5、ES6 中继承

  组合继承,原型链和构造函数的技术组合到一起来实现继承

  属性拷贝:将对象的成员赋值一份给需要继承的对象

  借用构造函数

10、CSS3 的新特性

  选择器(伪类选择器)、背景和边框、文本效果、动画、过度、多列布局

11、H5 的新特性

  语义化标签:header、footer、section、nav

  增强型表单:input 的多个 type

  新增表单元素:datalist、keygen、output

  拖拽

  本地存储

12、盒模型:

  组成:content、padding、border、margin

  标准盒模型:只计算 content 的宽高,不加 padding、border、margin

  怪异盒模型:计算 content + padding + border,不加 margin

13、如何优化代码

  代码重用、避免全局变量、适当的注释、内存的管理

14、WEB 前端性能优化

  减少 HTTP 请求、合理的设置缓存、资源合并压缩、将外部 js 置底、雪碧图

15、元素的垂直水平居中

  1、文本图片:line-hiegh;高度:text-align:center

  2、绝对定位:left:50%;top:50%;margin 负半值;

  3、绝对定位:margin + auto,top:0; left:0; right:0; bottom:0;

16、响应式布局的实现

  meta 标签定义、百分比布局、rem 布局、媒体查询、弹性盒布局

17、浏览器的缓存

  localstorage、sessionstorage、cookie、

18、jsonp 跨域原理

  动态创建 script 标签,src 连接接口地址、callback 参数就是服务器返回给我们的数据,jsonp 支持 get 不支持 post,post 请求需要后端来给我们配置

19、如何解决 jsonp 跨域原理?

  跨域原理:协议、域名、端口号有一个不统一就形成跨域

  jsonp 跨域

  设置 nginx 反向代理

  服务器设置请求头

20、ajax 的原理及具体应用场景

  通过 XMLHttpRequirst 给服务器发送请求,再通过 XMLHttpRequest 对象来接受服务器返回的数据,最后通过 dom 操作数据写到页面上;

  XMLHttpRequset 是 ajax 的核心机制,实在 IE5 中首先引用的,是一种异步的无刷新技术,简单地说,也就是 JS 可以及时的向服务器提出请求和处理响应,而不是阻塞用户,从而达到无刷新的效果。

  表单输入规范验证;用来做性能优化

21、反向代理怎么配置:

   location / {

          proxy_pass  http://apachephp;

22、js 数据类型

  基本数据类型:string、boolean、number、underfined、object、null

  引用数据类型:object(array、data、function)

23、map 和 forEach 的区别

  forEach()  返回的 undefined,不可以链式调用

  map() 返回的是一个新数组,原数组不会改变

24、伪类和伪元素的区别

  伪类不产生新的对象,只是在 DOM 中一个元素的不同状态

  伪元素产生新对象,在 DOM 树中看不到

25、清除浮动的方法:

  1、overflow:hidden

  2、clear:both

  3、after 伪元素清除浮动

26、ajax 的原生对象,如何完成一个完整的 ajax 请求

  XMLHttpRequest

  var xhr = new XMLHttpRequest();

  xhr.open(url, "get", true)

  xhr.onreadStatechange = function(res){}

  xhr.send()

27、内存泄漏其他方式(除了闭包)

  1、DOM 对象与 js 相互吸引

  2、给 DOM 对象用 attachEvent 绑定事件

  3、从外到内执行 appendChild

  4、反复重写一个属性

28、css 预处理器

  scss

  嵌套、$变量、@mixin混合、@extend继承、@import引入

29、阻止事件冒泡

  e.stopPropation()   标准浏览器

  event.cancelBubble = true   IE9之前

30、阻止默认事件:

  return false

  e.preventDefault()

31、ajax 的缺点:

  1、不支持浏览器的 back 按钮

  2、暴露了与服务器交互的细节

  3、对搜索引擎的支持比较弱

  4、破坏了程序的异常机制

32、ajax 的流程

  1、创建 XHR 对象,也就是一个异步调用的对象

  2、创建新的 http 请求,指定该 http 请求的方法, URL 、以及验证信息

  3、设置响应 http 请求状态变化的函数

  4、获取异步调用返回过来的数据

  5、使用 js 和 DOM 实现局部刷新

33、== 和 === 的区别

  == 检查值相等,允许类型转换;

  === 检查值和类型相等,不允许类型转换

34、js 高阶函数

  1、array.prototype.map

  2、array.prototype.filter

  3、array.prototype.reduce

35、css 实现三角形

  div{ width:0; 

    height: 0;

    border-top:50px solid blue;

    border-right:50px solid red;

    border-bottom:50px solid green;

    border-left:50px solid yellow;

    }

36、数组去重

  1、利用 indexOf 检测元素在数组中第一次出现的位置是否和元素现在的位置相等,如果不是说明在元素是重复元素

    function unique(arr) { if (!Array.isArray(arr)) {    console.log('type error!')    return } return Array.prototype.filter.call(arr, function(item, index){     return arr.indexOf(item) === index;    }); } 

  2、Set 函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该性能也能做到给数组去重

    function unique(arr) {    if (!Array.isArray(arr)) {        console.log('type error!')         return } return [...new Set(arr)] } 

37、call 和 apply 的区别

  apply 最多只能有两个参数,新 this 对象和一个数组 argArray ,如果 arg 不是数组会报错 TypeError

  call 可传递多个参数,第一个参数和 apply 一样,是用来替换的对象,后面是参数。

38、ES7 的新特性

  函数作用域中严格模式的变更

39、EC5 的新特性

  严格模式、JSON对象(stringify(obj/arr)、parse(json))、parse(json)、object扩展、Array扩展、function扩展

40、http协议请求过程

  域名解析,发起TCP 3次握手,建立 tcp 连接后发起 http 请求,服务器响应请求、浏览器获得 html 代码,浏览器解析 html 代码,并请求 html 代码中的资源,浏览器对页面进行渲染呈现给用户。

41、ES6 的数组新增的方法

  Array.from

  Arrayof()

  find

  fill

  includes

  entries

  flat

42、new 的时候做了什么

  1、创建一个新的对象

  2、将构造函数中的作用域给新对象

  3、执行构造函数中的代码

  4、返回新对象

43、DOM 的添加、移除、移动、复制、创建、查找

  创建新节点

    createDocumentFragment() 创建一个的 DOM 片段

    createElement() 创建一个具体的元素

    createTextNode() 创建一个文本节点

  添加、移除、替换、插入

    appendChild()

    removeChild()

    replaceChild()

    insertBefore()

  查找

    getElementsByTagName() 通过标签名称

    getElementsByName() 通过元素的 Name 属性值

    getElementById() 通过元素 id

44、HTTP 协议中 GET 和 POST 有什么区别,分别适合什么样的场景

  get 传送的数据长度有限,post 没有
  get 通过 url 传递,在浏览器的地址栏可见,post 是在请求头中传递
  使用场景:
  post 一般用于表单的提交
  get 一般用于简单的数据查询,严格要求不是那么高的场景

45、js 作用域链

  局部变量:局部变量就是在定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,形参也是局部变量。
  全部变量:全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围时当前文件的任何地方。

46、ajax 的优点,同步 异步的区别

  ajax 优点:
    1、无刷新更新数据
    2、异步与服务器通信
    3、前后端负载均衡
    4、基于规范被广泛使用
    5、界面与应用分离
  ajax 缺点:
    1、不能很好的支持移动端
    2、浏览器界面无法前进或者后退
    3、对搜索引擎的支持比较弱
    4、太多客户端造成开发上的成本。
    5、安全威胁,ajax技术就如同对企业建立了一个直接通道,这使得开发者在不经意间会暴露比以前更多的数据和业务逻辑

  同步:
    一个任务没有执行完就不会执行下一个任务
  异步:
    同一时间执行多个任务

  优缺点:
    1、同步的执行效率会比较低,耗费事件,但是有利我们对流程进行控制,避免很多不可掌控的意外情况
    2、异步的执行效率很高,节省时间,但是对占用更多的资源,也不利于我们对进程控制
  异步的使用场景:
    1、不涉及共享资源,或者对共享资源只读,即非互斥操作
    2、没有秩序上的严格关系
    3、常用于 IO 操作等一些耗时操作,
    4、不影响主线程逻辑
  同步的好处:
    1、同步流程会结果处理通常更为简单,可以就近处理
    2、同步流程对结果的处理始终和前文保持在一个上下文内
    3、同步流程可以很容易捕获,处理异常
    4、同步流程是好的控制过程顺序执行的方式
  异步的好处:
    1、异步流程可以立即给调用方法返回初步的结果
    2、异步流程可以延时给掉调用方最终的结果数据,
    3、异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞
    4、异步流程可以等多次调用的结果出来后,在同一返回一次结果集合,提高响应率

 

  

 

posted on 2019-07-18 19:02  变强鸭!  阅读(2585)  评论(0编辑  收藏  举报