每个JavaScript程序员都应该知道什么?[已关闭]
有没有一组事情是每个JavaScript程序员都应该知道的,以便能够说“我知道JavaScript”?
有没有一组事情是每个JavaScript程序员都应该知道的,以便能够说“我知道JavaScript”?
不是jQuery。不是YUI。不是(等等等等)
框架可能很有用,但它们通常隐藏了JavaScript和DOM实际上如何从你那里工作的有时丑陋的细节。如果你的目标是能够说“我知道JavaScript”,那么在一个框架上投入大量时间就与此相反了。
以下是一些JavaScript语言功能,您应该知道这些功能,以了解它正在做什么并且不会被抓住,但对许多人来说,这些功能并不是显而易见的:
那和是一回事(所以你能不能停止使用,谢谢);对象属性始终是字符串(即使对于数组也是如此);为了
什么...in
是 for (以及它不是什么)。object.prop
object['prop']
eval
财产嗅探;是什么(以及为什么它闻起来);为什么看似鲜为人知的运算符是有益的,并且与/检查不同;的目的。undefined
in
typeof
undefined
hasOwnProperty
delete
数据类型实际上是一个浮点数;使用浮点数的与语言无关的困难;避免八进制陷阱。Number
parseInt
嵌套函数范围;在您想要的范围内使用的必要性,以避免意外的全局变量;如何将范围用于闭包;闭包循环问题。var
全局变量和属性如何碰撞;全局变量和文档元素如何不冲突,但在IE中发生冲突;在全球范围内使用的必要性也以避免这种情况。window
var
该语句如何作用于在定义前面的代码之前“提升”定义;函数语句和函数表达式之间的区别;为什么不应使用命名函数表达式。function
构造函数、属性和运算符如何真正工作;利用这一点来创建你真正想要的普通类/子类/实例系统的方法;当您可能希望使用基于闭包的对象而不是原型设计时。(大多数JS教程材料在这方面绝对是可怕的;我花了好几年的时间才把它弄清楚。prototype
new
如何在调用时确定,而不是绑定;因此,方法传递如何不像你对其他语言的期望那样工作;如何关闭或可能用于解决这个问题。this
Function#bind
其他 ECMAScript 第五版功能,如 ,和 Array
上的函数式编程方法;如何修复较旧的浏览器以确保您可以使用它们;将它们与内联匿名函数表达式结合使用,以获得紧凑、可读的代码。indexOf
forEach
浏览器和用户代码之间的控制流;同步和异步执行;在控制流(例如焦点)内触发的事件与控制返回时发生的事件和超时;如何调用所谓的同步内置,例如最终会导致潜在的灾难性重新吸引。alert
跨窗口脚本如何影响 ;跨窗口脚本如何影响跨不同文档的控制流;如何有望解决这个问题。instanceof
postMessage
请参阅有关最后两项的答案。
最重要的是,你应该批判性地看待JavaScript,承认由于历史原因,它是一种不完美的语言(甚至比大多数语言还要多),并避免它最糟糕的麻烦。克罗克福德在这方面的工作绝对值得一读(尽管我不是100%同意他关于“好部分”的观点)。
它可以被禁用。