interview js

1.es6新特性:

新增const、let、箭头函数、模板字符串、对象以及数组的结构、for...of、for...in

var 相比let管的宽,她得值可以被内部修改

let:跨级作用域、只会在所定义块生效

const:用来定义常量(可以是字符串、函数对象、并且初始值不可以为空)

对比:

var声明的变量存在变量提升、let和const不存在变量提升

注:var不赋值的时候,报错:var 已声明,但为undefined。

        let const报错找不到这个值

let const不能同名变量,var可以。

const  如何声明的是复合类型数据(引用数据类型)即 Object,可以修改其属性值,object又被分为三类:对象(Object)、数组(Array)、函数(function)。

let 一般应用于基本数据类型。

2.dom(文档对象模型)事件流

就是事件执行的顺序流。DOM树中有大量的元素,元素之间出现嵌套时,给父子元素同时设置了事件,父子元素的事件执行会按照某种顺序执行,这就是事件流。当然,嵌套层级不限,最终事件流会贯穿当前元素和根元素之间整个嵌套过程。

dom结构是一个树型结构,当一个HTML产生事件时候,改事件会在元素节点与根节点之间的路径传播,路径所经过的节点,都会收到该事件,这个传播的过程是dom事件流。

DOM事件流的三个阶段?

1)事件捕获阶段
2)处于目标阶段
3)事件冒泡阶段

3.事件委托

也可以成为(事件代理),将原来绑定在子元素身上的是事件委托给父元素,让父元素去监听事件,其原理是利用事件冒泡。

优点:可以减少事件的注册,节省内存占用,也可以实现当新增对象时无需再次对其绑定事件。

(一般应用于虚拟dom场景,即有些DOM元素还不存在,就想给它们绑定事件,需要借助它们的父元素帮它们绑定事件。)

4.同源策略

介绍同源:域名、端口和协议都相同就属于同源,有一个不同就需要跨域请求

同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

5.深拷贝与浅拷贝

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的

浅拷贝只复制指向某个对象的指针,而不是复制对象本身,新旧对象还是共享同一块内存。但深拷贝会梁歪创造一个一模一样的对象,新对象很原对象不共享内存,修改新对象不会改到原对象。

var obj1 = {
   'name' : 'zhangsan',
   'age' :  '18',
   'language' : [1,[2,3],[4,5]],
};

浅拷贝:对原始对象影响(第一层基本数据不改变,子对象原始数据一同改变)

1)Object.assign({},obj)   注意:当object只有一层的时候,是深拷贝

2)Array.prototype.concat  例如:

let arr = [1, 3, {
   username: 'kobe'
}];
let arr2=arr.concat();    
arr2[2].username = 'wade';
console.log(arr);  // wade

3) Array.prototype.slice()  例如:

let arr = [1, 3, {
   username: ' kobe'
}];
let arr3 = arr.slice();
arr3[2].username = 'wade'
console.log(arr); // wade

深拷贝:对原始对象影响(第一层基本数据不改变,子对象原始数据也不会改变)

1)JSON.parse(JSON.stringify()) 这种方法虽然可以实现数组或对象深拷贝,但不能处理函数

 2)手写递归方法

3)函数库lodash

函数库提供_.cloneDeep 用来做Deep Copy

var _ = require('lodash');
var obj1 = {
   a: 1,
   b: { f: { g: 1 } },
   c: [1, 2, 3]
};
var obj2 = _.cloneDeep(obj1);
console.log(obj1.b.f === obj2.b.f);
// false

6.sort 排序   用于对数组的元素进行排序,并返回数组

不传参数 arr.sort()

传入参数,实现升序,降序

		var arr3 = [30,10,111,35,1899,50,45];
		arr3.sort(function(a,b){
			return a - b;
		})
		console.log(arr3);//输出  [10, 30, 35, 45, 50, 111, 1899]
		
		var arr4 = [30,10,111,35,1899,50,45];
		arr4.sort(function(a,b){
			return b - a;
		})
		console.log(arr4);//输出 [1899, 111, 50, 45, 35, 30, 10]

    7.箭头函数和fn函数区别

1)  this 指向不同:

  • 普通函数this 指向 为方法调用的对象,可以通过bind,call,apply,改变this指向
  • 箭头函数比函数表达式更简洁,箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。bind,call,apply只能调用传递参数,不可修改this指向

     箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值。
      任何方法都改变不了其指向

2)  箭头函数没有原型,

3)  箭头函数不能绑定arguments,取而代之用rest参数...解决 

4)  箭头函数是匿名函数,不能作为构造函数,不能使用new
————————————————
作者:Lyan_2ab3
链接:https://www.jianshu.com/p/59be0fc4f4a6
来源:简书

8.HTTP和HTTPS的区别

HTTP超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。

HTTPS:是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

区别:

1、HTTPS  协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
————————————————
原文链接:https://blog.csdn.net/qq_38289815/article/details/80969419

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值