我看不出这段严肃的js代码的含义

时间:2018-06-11 18:53:42

标签: javascript

这些行位于Mozilla pdf js查看器中。他们应该是正确的。但对我来说,他们看起来像:

a = b;
if (b !== a) {
    // do something
}

以下是行:

function webViewerPageNumberChanged(evt) {
    var pdfViewer = PDFViewerApplication.pdfViewer;
    pdfViewer.currentPageLabel = evt.value;
    if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
        PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
    }
}

有人可以解释一下吗?

以上代码行位于viewer.js - pdfjs.1.9.426_dist中的line 2194。 根据以下line 8842 Ivan的答案得到以下吸气人/安装者的回答似乎是正确的:

}, {
    key: 'currentPageNumber',
    get: function get() {
        return this._currentPageNumber;
    },
    set: function set(val) {
        if ((val | 0) !== val) {
            throw new Error('Invalid page number.');
        }
        if (!this.pdfDocument) {
            return;
        }
        this._setCurrentPageNumber(val, true);
    }
}, {
    key: 'currentPageLabel',
    get: function get() {
        return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
    },
    set: function set(val) {
        var pageNumber = val | 0;
        if (this._pageLabels) {
            var i = this._pageLabels.indexOf(val);
            if (i >= 0) {
                pageNumber = i + 1;
            }
        }
        this.currentPageNumber = pageNumber;
    }
}, {

2 个答案:

答案 0 :(得分:1)

line 1991 of pdf.js/app.js [1] "variable x" "variable y" "variable z" 语句前面的Jonas W.注释:

  

确保页码输入显示正确的值,即使是   用户输入的值无效(例如浮点数)。

因此,if可能是NaN的潜在价值。在这种情况下,making a pull requestion to change line 1998表示evt.value会返回evt.value !== pdfViewer.currentPageLabel

false

我希望这会有所帮助。

编辑:确实是用户1919163,你是对的。

我在{{3}}之后得到了这个回复:

  

我不认为这个修复是正确的。虽然看起来我们正在将变量与自身进行比较,但 currentPageNumber实际上是一个非常复杂的setter ;见

function webViewerPageNumberChanged(evt) {
  let pdfViewer = PDFViewerApplication.pdfViewer;
  pdfViewer.currentPageLabel = evt.value;

  // Ensure that the page number input displays the correct value, even if the
  // value entered by the user was invalid (e.g. a floating point number).
  if (evt.value !== pdfViewer.currentPageNumber.toString() &&
      evt.value !== pdfViewer.currentPageLabel) {
    PDFViewerApplication.toolbar.setPageNumber(
      pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
  }
}
  

因此,它不仅仅是一项任务。逻辑完成后,我们想检查条件是否成立。

     

除非有明显的错误(如果是,请为它打开一个问题),我认为这很好。

答案 1 :(得分:0)

此功能可能绑定到滚动事件。执行时检查当前页面是否与显示的页面匹配。如果没有,它会更新显示的页面。

我认为evt.value包含当前页码。

if(currentPageNumber != displayedPageNumber){
    /* update page number*/
}