javascript - 我的 JavaScript 源代码在一次错误的备份中丢失了,试图理解 if 语句

标签 javascript

我一年前做的一个项目的源代码丢失了,所以现在我试图从最小化的 Javascript 中恢复它。问题是像 if 语句这样的东西,我不知道这样的东西到底在做什么:

if (isFunction(action) && (action = {
        on: action
    }), actionName[actionName] || (actionName[actionName] = {}), id = index++ , actionName[actionName][id] = {
        active: typeof action.active != "undefined" ? action.active : true
    }, r.forEach(function (i) {
        action[i] && (actionName[actionName][id][i] = action[i])
    }), typeof i[actionName] != "undefined") action.on(i[actionName]);

我已经重命名了一些单字母函数和变量,但我不明白这个 if 语句如何与逗号一起使用,并在 if 语句头部的括号内设置变量。

最佳答案

并没有真正回答 if 到底做什么的问题,但可能会在整个过程中帮助您。

重要的部分是首先以您可以看到属于在一起的各个表达式的方式格式化代码:

if (

    isFunction(action)
    && 
      (action = {
        on: action
      }), 
      actionName[actionName] || (actionName[actionName] = {}),
      id = index++, 
      actionName[actionName][id] = {
        active: typeof action.active != "undefined" ? action.active : true
      },
      r.forEach(function (i) {
        action[i] && (actionName[actionName][id][i] = action[i])
      }),
      typeof i[actionName] != "undefined"

) 
  action.on(i[actionName]);

if 中最上面的表达式是 &&。仅当左侧为 true 时,才会评估 && 的右侧,因此您可以将其转换为另一个 if 语句:

if ( isFunction(action) ) {
  if(  
      (action = {
        on: action
      }), 
      actionName[actionName] || (actionName[actionName] = {}),
      id = index++, 
      actionName[actionName][id] = {
        active: typeof action.active != "undefined" ? action.active : true
      },
      r.forEach(function (i) {
        action[i] && (actionName[actionName][id][i] = action[i])
      }),
      typeof i[actionName] != "undefined"

  ) 
    action.on(i[actionName]);
}

因此,在第二个 if 语句中,您有一个带有 comma operator 的表达式

The comma operator evaluates each of its operands (from left to right) and returns the value of the last operand.

因此,只有最后一个与该if相关,其他所有内容都可以移出if,并且您可以去掉这些逗号。

if ( isFunction(action) ) {

  (action = {
    on: action
  })

  actionName[actionName] || (actionName[actionName] = {})

  id = index++

  actionName[actionName][id] = {
    active: typeof action.active != "undefined" ? action.active : true
  }

  r.forEach(function (i) {
    action[i] && (actionName[actionName][id][i] = action[i])
  })

  if( typeof i[actionName] != "undefined" ) 
     action.on(i[actionName]);
}

您现在可以继续actionName[actionName] || (actionName[actionName] = {})action[i] && (actionName[actionName][id][i] = action[i]) 或代码的其他部分.

关于javascript - 我的 JavaScript 源代码在一次错误的备份中丢失了,试图理解 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56982099/

相关文章:

javascript - Equal Columns JS 忽略内容

javascript - 是否有任何 DOMstring 元素未存储在新变量中以供进一步处理的原因?

javascript - iPhone Safari HTML 表单 'undefined' 不是对象

javascript - 使用 html 文件作为 Angular 2 中组件的模板

javascript - 如何使用 office.js 访问更改的数据

javascript - Mongoose find() 不适用于 $not 查询

javascript - Appscript 中的授权请求 header

javascript - jQuery:寻找第二个最接近的div

javascript - WebGL - 顶点着色器调用的变量数组大小

javascript - 如何基于路由在组件内部渲染组件