变量声明后的三元条件在使用StandardJS时被视为不良做法

时间:2018-06-04 12:05:15

标签: javascript ternary-operator

在使用JS标准(没有分号)时,我遇到了一个有点令人困惑的问题,我认为我在使用以下代码时出错:

window.onload = function () {
  var menu = document.getElementById('menu')
  (window.pageYOffset > 10)
    ? menu.classList.add('scrolled')
    : menu.classList.remove('scrolled')
}

这会在控制台中产生document.getElementById is not a function错误,并在var声明的末尾添加一个分号来修复它。我想知道的是,如果使用JS编码标准,上面的代码在某些方面不是一个好的模式或错误。

更新:好吧,所以我认为正确的方法,标准的,做上述事情的方法是:

  var menu = document.getElementById('menu')
  ;(window.pageYOffset > 10)
    ? menu.classList.add('scrolled')
    : menu.classList.remove('scrolled')

链接:https://standardjs.com/rules.html#semicolons

2 个答案:

答案 0 :(得分:2)

问题在于JS如何在没有分号的情况下解释代码:

document.getElementById('menu')

删除空格后,您可以像这样重新组织:

if

所以现在JS会尝试将 not-a-function program test implicit none character(len=100) :: s read(*, '(a)') s write(*, '(i0)') len_trim(s) end program test 作为一个函数来调用它是否返回一个值,然后评估你的Hello World! ,并且这一点你的错误会弹出。

答案 1 :(得分:0)

另一个想法是使您的三元数更特定于您实际要切换的内容,并使用返回值选择方法:

var menu = document.getElementById('menu')
menu.classList[window.pageYOffset > 10 ? 'add' : 'remove']('scrolled')

这样一来,您不必重复自己,您就可以完全避免此问题。