JavaScript总结【2】对象Object基础

本文详细介绍了JavaScript中的对象基础,包括属性命名、调用、计算属性,以及对象引用、复制、垃圾回收机制。重点讲解了this在对象方法中的作用、构造函数和new操作符的工作原理,还探讨了可选链、Symbol类型的应用,以及对象的原始值转换和属性配置。此外,文章还讨论了如何使用getter和setter进行属性访问控制,以及如何利用Symbol创建隐藏属性。
摘要由CSDN通过智能技术生成

Object(对象)基础

通过使用带有可选 属性列表 的花括号 {…} 来创建对象。一个属性就是一个键值对(“key: value”),其中键(key)是一个字符串(也叫做属性名),值(value)可以是任何值。

对象属性

属性命名

  • 属性名可以是任何字符串或者 symbol,其他类型自动转换为字符串
  • **属性名简写:**部分情况下省略:...
  • **属性存在测试:**使用in操作符

属性调用

  • **点符号:**点符号要求 key 是有效的变量标识符。这意味着:不包含空格,不以数字开头,也不包含特殊字符(允许使用 $_
  • 方括号:方括号中的字符串必须放在引号中,方括号中变量 key 可以是程序运行时计算得到的,也可以是根据用户的输入得到的,点符号不行

计算属性

当创建一个对象时,我们可以在对象字面量中使用方括号。这叫做 计算属性,如let bag = { [fruit + 'Computers']: 5}

对象引用和复制

引用及比较

地址,两对象===必须在地址相同为统一对象时成立

克隆与合并

  1. Object.assign

    • Object.assign(dest, [src1, src2, src3...])dest对象与src合并,改变了dest对象并且返回值也为合并的结果!
    • 注意,只拷贝了一层,即多层引用无法复制,进行克隆时可传入空对象。
    • 存在多个同名属性时后面的会覆盖前面的
  2. 深拷贝:递归实现

    • 递归
    • 使用现有库
// 造轮子
function deepClone (sourceObj, targetObj) {
   
    let cloneObj = targetObj || {
   }
    if(!sourceObj || typeof sourceObj !== "object" || sourceObj.length === undefined){
   
        return sourceObj
    }
    if(sourceObj instanceof Array){
   
        cloneObj = sourceObj.concat()
    } else {
   
        for(let i in sourceObj){
   
            if (typeof sourceObj[i] === 'object') {
   
                cloneObj[i] = deepClone(sourceObj[i], {
   })
            } else {
   
                cloneObj[i] = sourceObj[i]
            }
        }
    }
    return cloneObj
}

// lodash函数库
// npm install lodash
import lodash from 'lodash'
let targetOj = lodash.cloneDeep(sourceObj)

JavaScript垃圾回收机制

可达性分析

”可达“值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。

基本步骤

垃圾回收的基本算法被称为 “mark-and-sweep”。定期执行以下**“垃圾回收”步骤:**

  • 垃圾收集器找到所有的根,并“标记”(记住)它们。
  • 然后它遍历并“标记”来自它们的所有引用。
  • 然后它遍历标记的对象并标记它们的引用。所有被遍历到的对象都会被记住,以免将来再次遍历到同一个对象
  • ……如此操作,直到所有可达的(从根部)引用都被访问到。
  • 没有被标记的对象都会被删除
    javascriptInfo 垃圾回收机制

优化算法

  • 分代收集:辈分越高,检查频次越低
  • 增量收集:CMS垃圾回收机制,三色标记原理,分部分处理
  • 闲时收集:如其名

对象方法中的this

  1. 谁调用指向谁
  2. 箭头函数上下文

对象的构造函数和操作符new

构造函数

**构造函数:**技术所就是常规的函数,但我们预定:

  • 命名以大写字母开头
  • 它们只能由 new 操作符来执行

new操作符

  1. new执行时的步骤:

    • 一个新的空对象被创建并分配给 this
    • 函数体执行。通常它会修改 this,为其添加新的属性
    • 返回 this 的值
// 过程类似于:
function User(name) {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值