我一年前做的一个项目的源代码丢失了,所以现在我试图从最小化的 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/