7 - 小知识点

1 深复制+浅复制

1 简单描述: 
  1 浅复制: 复制的是引用地址
  2 深复制: 复制的是堆内存中的对象, 是一个全新的对象, 跟之前是不同的引用地址

2 实现浅复制的方法: var hh = obj

3 实现深复制的方法: 
  1 var hh = json.parse(json.stringify(obj))  //基于 obj, 创建了新的对象 hh
  2 let hh = {
    
    ...obj}  //基于 obj, 创建了新的对象 hh
  3 let hh = [...arr]  // 基于 arr, 创建了新的数组 hh

2 判断数据类型的所有方式

1 判断数据类型的方式: 
-----------------------------------------------------------------------------------------
1 typeof x
2 console.log(Object.prototype.toString.call(str))
-----------------------------------------------------------------------------------------

2 怎么判断一个变量是否为数组
-----------------------------------------------------------------------------------------
1 Array.isArray( hh )   // true / false
2 hh instanceof Array   // true / false
-----------------------------------------------------------------------------------------

3 关于对象的

1 怎么判断某个对象是一个空对象: 
-----------------------------------------------------------------------------------------
1 将json对象转化为json字符串,再判断该字符串是否为"{}"
2 console.log(JSON.stringify(a)==='{}')  //true
-----------------------------------------------------------------------------------------

4 关于数据的

1 
-----------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------

5 遍历对象的方法

1 遍历对象: for in 循环
-----------------------------------------------------------------------------------------
1 注意事项: 
  1 for in 只会遍历自定义属性, 不会遍历原型上的默认属性和方法
  2 但在实际应用中, 若原型上新增了属性和方法, for in 就会把新增的属性和方法遍历出来 (解决方案, 如下代码)
  3 for in 循环也可遍历数组, 但一般不那么干


2 代码范式: 

  1 基础格式
    for (var k in obj) {
    
    
      console.log(k)   //obj的每个属性
      console.log(obj[k])   //obj的每个属性对应的属性值
    }

  2 解决方式 1
    for (var k in obj) {
    
    
      if(!Object.prototype.hasOwnProperty.call(people,key)) continue;
      console.log(k, obj[k])   //如上代码就, 解决了, 遍历新增属性和方法的这个特性
    }

  3 解决方式 2
    for (var k in obj) {
    
    
      if (obj.hasOwnProperty(k)){
    
      //此方法会忽略掉, 从原型上得到的属性
         console.log(k, obj[k]) 
      }
    }
-----------------------------------------------------------------------------------------

6 遍历数组的方法

1 for of 循环
-----------------------------------------------------------------------------------------
1 注意事项: 
  1 无法遍历对象
  2 只会遍历数组元素

2 代码范式: 
  let arr = [1, 2, 3]
  for (let v of arr) {
    
    
    console.log(v)   // v == 数组元素
  }
-----------------------------------------------------------------------------------------

2 forEach()  //操作
-----------------------------------------------------------------------------------------
1 注意事项: 
  1 没有返回值
  2 可以改变原数组

2 使用场景: 
  1 在可以改变原数组的情况下使用
  2 所以不需要有返回值

3 代码范式: 
  let arr = [1, 2, 3]
  arr.forEach( (v, i) => console.log(v + '---' + i) )
-----------------------------------------------------------------------------------------

3 map()  //操作
-----------------------------------------------------------------------------------------
1 注意事项: 
  1 有返回值
  2 不可以改变原数组

2 使用场景: 
  1 不能改变原数组的时候使用
  2 这样就可以, 生成我们需要的新数组,return 出来

3 代码范式: 
  let arr = [1, 2, 3]
  let hh = arr.map( (v, i) => v + i )
  console.log(hh)
-----------------------------------------------------------------------------------------

4 filter  //过滤
-----------------------------------------------------------------------------------------
1 作用: 过滤数组, 拿到我们需要的数组元素, 组成新的数组,return 出来

2 代码范式: 
  let arr = [1, 2, 3]
  let hh = arr.filter( v => v>2 )
  console.log(hh)
-----------------------------------------------------------------------------------------

5 every  //判断
-----------------------------------------------------------------------------------------
1 作用: 遍历所有数组元素, 只要存在一个不符合条件的, 就返回 false

2 代码范式:
  let arr = [1, 2, 3]
  var hh = arr.every(v => v>2)  //只要发现一个, 不大于2的数组元素, 就返回 false
  console.log(hh)  // false
-----------------------------------------------------------------------------------------

6 some  //判断
-----------------------------------------------------------------------------------------
1 作用: 遍历所有数组元素, 只要存在一个符合条件的, 就返回 true

2 代码范式:
  let arr = [1, 2, 3]
  var hh = arr.every(v => v>2)  //只要发现一个, 大于2的数组元素, 就返回 true
  console.log(hh)  // true
-----------------------------------------------------------------------------------------

7 各种遍历方法之间的区别

1 for in / for of --> 区别

比较项 for in for of
作用 遍历对象 遍历数组
功能 可以遍历属性 不能遍历属性

2 forEach 和 for循环的区别 -> for 循环更加灵活

forEach for
不支持 break操作 (报错) 不报错
无法在遍历的同时删空自己 可以
不能控制循环的起点, 只能从0开始 可以自定义, 遍历起点
for 循环更加灵活, 可操作性强 forEch 使用方便, 封装好的 API
1 总结
-----------------------------------------------------------------------------------------
1 通常 for循环就可以解决我们的问题了

2 但是很多情况下, 使用 API可以更方便的解决问题
-----------------------------------------------------------------------------------------

8 其他知识点

1 页面跳转怎么传参: 
-----------------------------------------------------------------------------------------
1 get传值
2 路由传参
3 Localstorage
-----------------------------------------------------------------------------------------

2 结束循环: 
-----------------------------------------------------------------------------------------
1 break -- 结束整个循环 / switch 中防止穿透
2 continue -- 跳过当前循环项
3 return -- 结束函数 / 指定返回值
-----------------------------------------------------------------------------------------

3 微任务和宏任务: 
-----------------------------------------------------------------------------------------
1 宏任务: script标签 / setTimeout / setInterval   //常见的3个宏任务
2 微任务: promise.then 的回调; async 函数中await后面的程序
-----------------------------------------------------------------------------------------

4 前端是怎么加密信息的: 
-----------------------------------------------------------------------------------------
1 JavaScript 加密后传输 -- 在数据发送前 -- 将数据进行哈希或使用公钥加密

2 浏览器插件内进行加密传输

3 Https 传输
-----------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/weixin_46178697/article/details/114416193
今日推荐