为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第3天+ JS基础

标签:
Typescript

课程名称:《一天时间迅速准备前端面试 快速构建初级前端知识体系》

章节名称(序号):第4章 JS基础-变量类型和计算

讲师:双越

章节课程内容:手写 JS 深拷贝、变量计算

学习心得:

1、类型守卫

typeof 作用

typeof 用来检测一个变量或一个对象的数据类型

typeof 检测的范围

typeof 检测变量的类型范围包括: “string”|“number”| " bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" 等数据类型。

typeof 的局限性

typeof 检测变量并不完全准确,例如 typeof null 结果为object

typeof 的替代方案

Object.prototype.toString.call

Object.prototype.toString.call([]) 展示[object Array]

Object.prototype.toString.call(null) 展示[ object null ]

Object.prototype.toString.call(Set类型的变量)  展示[ object Set ]

Object.prototype.toString.call(Map类型的变量)  展示[ object Map ]

typeof 的替代方案依然无法解决的问题instanceof

就是无法获取一个自定义的类的实例变量或构造函数的对象变量的真正创建类型,答案是使用 instanceof 来解决。

instanceof 的主要作用: instanceof 帮助我们准确的判断一种自定义函数或类创建的对象变量的数据类型

instanceof 执行后 返回 true 的几种条件【符合一个即可】:

(1) 对象变量.__proto__=类名或函数名.prototype。

解释1:如果 instanceof  关键字 左边对象变量的 __proto__ 属性指向的原型对象空间=右边类名或函数名的 prototype 对象属性指向的原型对象空间,那么 返回 true。


(2)  对象变量.__proto__.__proto__...._proto__=类名或函数名.prototype。

解释2: instanceof 左边对象变量 __proto__的1到多个上一级__proto__指向的原型对象空间,等于右边类名或函数名的 prototype 对象属性指向的原型对象空间,那么也返回 true,按照这个查找规律,会一直找到Object.prototype 对象属性指向的原型对象空间为止。


2、深拷贝

function deepClone(obj = {}){
  if( typeof !== 'object' || obj == null) {
    return obj
  }
  
  let result 
  if(obj instanceof Array) {
    result = []
  } else {
    result = {}
  }
  
  for(let key in obj) {
    if(obj.hasOwnProperty(key)){
      //递归
       result[key] = deepClone(obj[key])
    }
  }
  return result
}

https://img1.sycdn.imooc.com/632063e50001b57210200572.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消