JavaScript存在什么反模式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (104)

我发现不应该做的是比应该做的更难的教训。

根据我的经验,将专家与中间人区分开来的是能够从各种表面上相同的方式中进行相同的选择。

所以,谈到JavaScript时,你应该做什么样的事情为什么

我能够为Java找到很多这样的内容,但是由于JavaScript的典型上下文(在浏览器中)与Java的很不相同,所以我很好奇看到了什么。

提问于
用户回答回答于

除了已经提到的那些......

  • 使用for..in构造来遍历数组 (迭代数组方法和索引)
  • 使用Javascript内联就像<body onload="doThis();"> (不灵活并防止多个事件监听器)
  • 使用'Function()'构造函数 (由于相同的原因eval()而不好)
  • 将字符串而不是函数传递给setTimeoutsetInterval (也在eval()内部使用)
  • 依靠不使用分号的隐式语句 (坏习惯挑选,并可能导致意外的行为)
  • 使用/ * .. * /来阻挡的代码行 (可以使用正则表达式文字干扰,例如:/* /.*/ */) <传福音>当然,不使用原型;)</传福音>
用户回答回答于

语言:

  • 命名空间通过在全局上下文中创建大量变量来进行污染。
  • 以'foo.onclick = myFunc'的形式绑定事件处理程序(不可扩展,应该使用attachEvent / addEventListener)。
  • 几乎在任何非JSON上下文中使用eval
  • 几乎每一次使用document.write(使用像document.createElement这样的DOM方法)
  • 针对Object对象的原型设计(BOOM!)
  • 这是一个小问题,但是用'+'做大量字符串连接(创建一个数组并加入它会更有效率)
  • 引用不存在的undefined常量

设计/部署:

  • (通常)不提供无脚本支持。
  • 不将代码打包到单个资源中
  • 将内联(即body)脚本放在身体顶部附近(阻止加载)

特定于Ajax:

  • 不向用户指示请求的开始,结束或错误
  • 轮询
  • 传递和解析XML而不是JSON或HTML(在适当的情况下)

扫码关注云+社区

领取腾讯云代金券