面试题

42 阅读2分钟

css选择器权重

依次递增

  1. 通配符选择器* 权重为0
  2. 标签、伪元素选择器 (例如,h1)和伪元素(例如,::before
  3. 类、伪类、属性选择器;类(例如,.example),属性选择器(例如,[type="radio"])和伪类(例如,:hover
  4. id 选择器
  5. style 内联
  6. !important

http和https区别

  • http 明文传输,数据未加密,安全性差,https数据加密,需要协议证书,安全性好
  • http端口是80,https是443
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

es6有哪些浅拷贝方法

  1. ...扩展操作符 第一级属性深拷贝,以后级别属性浅拷贝
let a={title:{info:"二级属性"}};
let b={...a,content:"一个教程"};
b.title.info = '二级属性都被修改了'
console.log(a.title);//{"info":"二级属性都被修改了"}
console.log(b.title);//{"info":"二级属性都被修改了"}
  1. Object.assign
    1. Object.assign()用于将所有可枚举属性的值从一个或多个源对象复制到目标对象
    2. Object.assign()第一级属性深拷贝,以后级别属性浅拷贝
let o ={name: {asd: '123'}}
let p = Object.assign({}, o)
p.name = '123456789'
console.log(p, o);//{name: "123456789"},{name: {asd: "123"}}
p.name.asd = '123456789'
console.log(p, o); // {name:{asd:"123456789"}} {name:{asd:"123456789"}}

3.slice可以截取数组中部分的元素,若参数为空,则可对数组进行浅拷贝

let a = [1,2,[1,2,3]];
let b = a.slice();
console.log(a == b);    // false
a[2][1] = 11;
a[0] = 11;
console.log(a); // [ 11, 2, [ 1, 11, 3 ] ]
console.log(b); // [ 1, 2, [ 1, 11, 3 ] ]
console.log(a[2] == b[2]);  // true
  1. concat可以对数组进行合并,若参数为空,亦可对数组进行浅拷贝
let a = [1,2,[1,2,3]];
let b = a.concat();
console.log(a == b);    // false
a[2][1] = 11;
a[0] = 11;
console.log(a); // [ 11, 2, [ 1, 11, 3 ] ]
console.log(b); // [ 1, 2, [ 1, 11, 3 ] ]
console.log(a[2] == b[2]);  // true
  1. Array.from()
let a = [1,2,[1,2,3]];
let b = Array.from(a);
console.log(a == b);    // false
a[2][1] = 11;
a[0] = 11;
console.log(a); // [ 11, 2, [ 1, 11, 3 ] ]
console.log(b); // [ 1, 2, [ 1, 11, 3 ] ]
console.log(a[2] == b[2]);  // true