首页 > 其他分享 >return isPlainObject(res) || Array.isArray(res) ? observer(res, cb) : res; 这个的执行顺序是什么

return isPlainObject(res) || Array.isArray(res) ? observer(res, cb) : res; 这个的执行顺序是什么

时间:2024-07-06 16:43:42浏览次数:13  
标签:isArray isPlainObject observer 对象 res 数组 cb 表达式

这段代码主要是在实现一个深度观察者模式的部分逻辑,用于递归地处理对象和数组,以便在数据结构变化时触发回调。这里的关键是理解条件运算符和函数调用的执行顺序。让我们逐步分析:

  1. 条件表达式的左侧:

    • isPlainObject(res): 这个函数检查res是否是一个纯对象(即普通的JavaScript对象,不包括像Date、RegExp这样的内置构造函数创建的对象)。
    • || Array.isArray(res): 如果res不是一个纯对象,那么检查它是否是一个数组。
  2. 条件表达式的右侧:

    • observer(res, cb): 如果res是一个对象或数组,那么调用observer函数,传入rescb作为参数。observer函数的目的是观察res的变化,并在变化时执行cb回调。
  3. 条件运算符的执行:

    • ? ... : ...: 这是一个条件(三元)运算符,它首先计算左侧的布尔表达式。如果左侧的表达式结果为true(即res是一个对象或数组),则执行问号后面的代码块(调用observer)。否则,执行冒号后面的代码块,即直接返回res

所以,整个表达式的执行顺序如下:

  1. 首先检查res是否是一个纯对象或数组。
  2. 如果res是一个纯对象或数组,那么调用observer(res, cb),这通常意味着observer会递归地深入res的每个层级,为每个属性的变化添加监听。
  3. 如果res既不是纯对象也不是数组,那么直接返回res,不做任何额外的处理。

这种设计模式常见于响应式框架中,比如Vue.js,用于自动跟踪数据变化并触发视图更新。

条件表达式后执行!!!

标签:isArray,isPlainObject,observer,对象,res,数组,cb,表达式
From: https://www.cnblogs.com/longmo666/p/18287425

相关文章

  • PostgreSQL语法
    PostgreSQL两个数据库都支持ACID事务,Postgres提供更强大的事务支持Postgres的查询优化器更优秀,详情参考此吐槽:https://news.ycombinator.com/item?id=29455852易用性UsabilityPostgres更加严格,而MySQL更加宽容:MySQL允许在使用GROUPBY子句的SELECT语句中包含......
  • 用免费WordPress和Cloudflare打造媲美收费服务的网站
    你是否曾因为网站搭建的高昂费用而犹豫不决?别担心,我来告诉你一个几乎零成本的解决方案,让你轻松拥有一个功能强大的网站。通过免费域名、免费PHP主机、WordPress程序和CloudflareCDN服务的组合,你可以打造出一个媲美收费服务的网站。首先,你需要一个域名。在lita.eu.org注册免费......
  • Pinia 实用教程【Vue3 状态管理】状态持久化 pinia-plugin-persistedstate,异步Action,s
    什么是状态管理?全局状态Store(如Pinia)是一个保存状态和业务逻辑的实体,与组件树没有绑定,有点像一个永远存在的组件,每个组件都可以读取和写入它。三大核心概念state属性——相当于组件中的datagetter计算属性——相当于组件中的computedaction操作属性的......
  • K-Nearest Neighbors (K-NN) 算法
    前言K-NN算法最早出现在1951年,由ThomasCover和PeterHart在他们的论文"NearestNeighborPatternClassification"中首次提出。K-NN算法的产生背景主要源于以下几个方面:分类问题的需求在现实生活中,许多问题都可以归结为分类问题,比如医疗诊断、图像识别、文......
  • wx.config的前后端实现express和react
    wx.config是微信JS-SDK的配置接口,用于初始化微信JS-SDK。为了确保安全性,微信要求每次调用JS-SDK时都需要进行签名认证。签名认证需要使用jsapi_ticket,而jsapi_ticket需要通过access_token获取。以下是实现wx.config的步骤:后端部分获取AccessToken你需要定期获取并缓存acce......
  • ContentPresenter 的作用
    我发现WPF自定义控件模板的时候有时候写ContentPresenter,有时候不写,不管写不写ContentPresenter都能自定义好一个漂亮的控件,为什么,那么ContentPresenter的作用是什么,写不写的区别是什么ContentPresenter是WPF中一个非常重要的控件,它的作用是显示控件的内容。以下是ContentPre......
  • PostgreSQL的系统视图pg_file_settings和pg_settings的区别
    PostgreSQL的系统视图pg_file_settings和pg_settings的区别pg_file_settings和pg_settings是PostgreSQL中两个相关的系统视图,它们用于查看和管理数据库的配置设置。这两个视图提供了不同层次的配置信息,适用于不同的管理和调试需求。以下是它们的区别和特点:pg_file_se......
  • 氛围共处(Ambient Co-presence)丨RTE 共读计划
       在同一个网络空间和情境下,营造一种微妙的、隐约感知的、实时同步的感觉。加入「RTE共读计划」:重要的技术,往往是那些不易察觉却无所不在的技术。欢迎阅读「RTE共读计划」的文章,我们希望通过本计划: •挖掘到那些帮助人们跨越距离实时互动(Real-TimeEngagement,RTE)并......
  • 【0293】Postgres内核之创建 dynahash table 解惑
    相关文章:【0291】Postgres内核之dynahashtable创建0.dynahashtable创建细节在【0291】Postgres内核之dynahashtable创建一文中详细讲解过Postgres内核创建一个dynamichashtable的源码实现。后台收到读者私信,说是有一些实现细节不太清楚。为了更直观地让读者......
  • 【0294】Postgres内核 dynahash 之 hash_search 实现原理
    相关文章:【0289】Postgres内核之哈希表(HashTables)【0290】Postgres内核之dynahash(动态哈希表,dynamichashtables)(概念篇)【0291】Postgres内核之dynahashtable创建【0292】Postgres内核源码之dynahash插入entry实现【0293】Postgres内核之创建dynahashtable解惑......