在阅读缩小的Javascript时,我应该如何阅读带有逗号的返回语句&;,和| |运算符?

在阅读缩小的Javascript时,我应该如何阅读带有逗号的返回语句&;,和| |运算符?,javascript,minify,Javascript,Minify,我有以下源代码: function findMessageErrors(btn) { var error = ""; var message = $(btn).parent().siblings().find("textarea[name='message']").val(); if (message === "") { error += "*Please enter a message.<br/>"; } if (!$(btn

我有以下源代码:

function findMessageErrors(btn) {
    var error = "";
    var message = $(btn).parent().siblings().find("textarea[name='message']").val();
    if (message === "") {
        error += "*Please enter a message.<br/>";
    }
    if (!$(btn).parent().siblings().find('input[name="agree"]').prop('checked')) {
        error += "*Please agree.<br/>";
    }
    return error;
}
函数findMessageErrors(btn){
var误差=”;
var message=$(btn.parent().sibbins().find(“textarea[name='message']).val();
如果(消息==“”){
错误+=“*请输入消息。
”; } if(!$(btn).parent().sides().find('input[name=“agree”]')).prop('checked')){ 错误+=“*请同意。
”; } 返回误差; }
这会缩小。缩小后,在Chrome开发工具源选项卡中显示如下:

function findMessageErrors(btn) {
    var error = "";
    return "" === $(btn).parent().siblings().find("textarea[name='message']").val() && (error += "*Please enter a message.<br/>"),
    $(btn).parent().siblings().find('input[name="agree"]').prop("checked") || (error += "*Please agree.<br/>"),
    error
}
函数findMessageErrors(btn){
var误差=”;
返回“===$(btn).parent().sibbins().find”(“textarea[name='message']).val()&&(error+=”*请输入消息。
), $(btn).parent().sides().find('input[name=“agree”]”).prop(“checked”)| |(error+=“*请同意。
”), 错误 }
我理解逗号运算符如何“按顺序运行一系列表达式,然后返回最后一个表达式的结果”。但我很难理解那些OR运算符是如何构建在缩小代码中返回的字符串的

有没有人能用一种有用的方式把它大声读出来,帮助我理解它是如何工作的?我想我看不出源代码中的两个独立IF语句是如何缩小为一系列&&then | |的。我不想每次想了解精简代码如何工作的逻辑时都必须查找源代码。

如果可能,使用而不是尝试阅读精简代码

但这并不意味着你不想知道如何阅读复杂的语句;有时人类会写它们。:-)

我做了一些格式化和内联注释来解释:

function findMessageErrors(btn) {
    var error = "";
    return (
        (
            "" === $(btn).parent().siblings().find("textarea[name='message']").val()
            &&
            // This only runs if the === above is true, because of the &&
            (error += "*Please enter a message.<br/>")
        )
        ,
        ( // This runs regardless of the above
            $(btn).parent().siblings().find('input[name="agree"]').prop("checked")
            ||
            // This only runs if prop("checked") returned a falsy value, because of ||
            (error += "*Please agree.<br/>")
        )
        ,
        ( // This runs regardless, of the above...
            // ...and this is the ultimate value of the return
            error
        )
    );
}
函数findMessageErrors(btn){
var误差=”;
返回(
(
“”=$(btn).parent().sibbins().find(“textarea[name='message']).val()
&&
//由于&&
(错误+=“*请输入消息。
”) ) , (//无论上述情况如何,此操作都会运行 $(btn).parent().sibbins().find('input[name=“agree”]”).prop(“选中”) || //只有当prop(“checked”)返回一个falsy值时,才会运行此操作,因为|| (错误+=“*请同意。
”) ) , (//无论上述情况如何,此操作都会运行。。。 //…这就是回报的最终价值 错误 ) ); }
之所以添加外部的
()
,是因为
return
后面的换行符会触发自动分号插入。为了解释清楚,添加了其他
()

在可能的情况下,使用而不是尝试读取缩小的代码

但这并不意味着你不想知道如何阅读复杂的语句;有时人类会写它们。:-)

我做了一些格式化和内联注释来解释:

function findMessageErrors(btn) {
    var error = "";
    return (
        (
            "" === $(btn).parent().siblings().find("textarea[name='message']").val()
            &&
            // This only runs if the === above is true, because of the &&
            (error += "*Please enter a message.<br/>")
        )
        ,
        ( // This runs regardless of the above
            $(btn).parent().siblings().find('input[name="agree"]').prop("checked")
            ||
            // This only runs if prop("checked") returned a falsy value, because of ||
            (error += "*Please agree.<br/>")
        )
        ,
        ( // This runs regardless, of the above...
            // ...and this is the ultimate value of the return
            error
        )
    );
}
函数findMessageErrors(btn){
var误差=”;
返回(
(
“”=$(btn).parent().sibbins().find(“textarea[name='message']).val()
&&
//由于&&
(错误+=“*请输入消息。
”) ) , (//无论上述情况如何,此操作都会运行 $(btn).parent().sibbins().find('input[name=“agree”]”).prop(“选中”) || //只有当prop(“checked”)返回一个falsy值时,才会运行此操作,因为|| (错误+=“*请同意。
”) ) , (//无论上述情况如何,此操作都会运行。。。 //…这就是回报的最终价值 错误 ) ); }

之所以添加外部的
()
,是因为
return
后面的换行符会触发自动分号插入。为了解释清楚,添加了其他
()

不阅读midified代码如何?它不是供人使用的。“我不想每次想了解精简代码如何工作的逻辑时都要查找源代码。”不要。使用源代码映射。以防不清楚,TJ指的是您可以在此处找到描述的技术:。不确定为什么要投否决票。。我只是想知道它是如何运作的。(现在我知道这是短路评估..多亏了这篇文章的回复)不读MIDI代码怎么样?它不是供人使用的。“我不想每次想了解精简代码如何工作的逻辑时都要查找源代码。”不要。使用源代码映射。以防不清楚,TJ指的是您可以在此处找到描述的技术:。不确定为什么要投否决票。。我只是想知道它是如何运作的。(现在我知道这是短路评估..感谢对这篇文章的回复)非常感谢。你的评论帮助我了解了正在发生的事情。我知道源代码映射并将使用它,但我只是认为这是我应该知道的关于Javascript的东西。再次感谢。为了进一步说明,这里每个语句中的“魔力”的核心是用于
&&
|
。非常感谢。你的评论帮助我了解了正在发生的事情。我知道源代码映射并将使用它,但我只是认为这是我应该知道的关于Javascript的东西。再次感谢。为了进一步说明,这里每个语句中的“魔力”的核心是用于
&&
|