小点

59 阅读2分钟
1. 快速居中对齐
   .parent{
      dispalay:flex;
   }
   .son{
     margin:auto;
   }
2. padding与margin有什么不同?

作用对象不同,padding是对自身的内边距,margin是作用外部对象的外边距

3. %与vw有什么不同?

%有继承关系(父级) , vw只和设备的宽度有关系

4.行内元素与块级元素的区别
块级元素默认占满一行,宽度继承父级
行内元素的宽高由内容决定,没有宽高内边距和外边距
5.支持小字体?

谷歌浏览器默认支持12px,可以通过缩放来实现

  .small-font{
    transform: scal(0.8);  // 12px的0.8倍
    -webkit-transform: scal(0.8);
  }
6.let和var的区别

1.var声明提升 2.var没有局部作用域 3.var声明覆盖

7. 深拷贝与浅拷贝

拷贝之后的数据不会影响原来的数据就是深拷贝,如果有影响就是浅拷贝

  1. 基本数据类型
 let a=10;
 let b=a;
 console.log(b); // 10 ,这叫做赋值,非要说就叫深拷贝
  1. 引用数据类型,数组与对象的赋值叫做浅拷贝
let arr1 = [1,2,3];
let arr2 = arr1;
arr2.push(4);
console.log(arr1,arr2); // [1,2,3,4] [1,2,3,4]
  1. 解构赋值对一维的数据可以看做是深拷贝,对多维的数据是浅拷贝
let arr1 = [1,2,3];
let arr2 = [...arr1];
arr2.push(4);
console.log(arr1,arr2); // [1,2,3] [1,2,3,4]

let arr1 = [[1,2,3],[4,5]];
let arr2 = [...arr1];
arr2[0].push(888);
console.log(arr1,arr2); // [[1,2,3,888],[4,5]] [[1,2,3,888],[4,5]]
  1. 深拷贝
let obj = [{id:1},{id:2},{id:3}];
let obj1 = JSON.parse(JSON.stringify(obj)); // function => "function" 会有问题

// 1.运行代码(第一层)
// 2.容错代码(第二层)
// 3.提示代码(维护代码)(第三层)
function deepCopy(source) {
  if (!source || typeof source !== "object") return source;
  const targetObj = source.constructor === Array ? [] : {}; // 提示代码
  for (let keys in source) {
    if (source.hasOwnProperty(keys)) {
      if (source[keys] && typeof source[keys] === "object") {
        // targetObj[keys] = source.constructor === Array ? [] : {}; // 提示代码
        // 递归
        targetObj[keys] = deepCopy(source[keys]);
      } else {
        // 基本数据类型直接赋值
        targetObj[keys] = source[keys];
      }
    }
  }
  return targetObj;
}