是否有一组东西是每个JavaScript程序员都应该知道的,以便能够说“我懂JavaScript”?
jQuery是我最好的推荐。不仅仅是代码本身,它的习惯用法、风格和背后的思想都是最值得模仿的。
Javascript 对象和函数作为一流的公民, 回调,不要忘记事件,然后JQuery。
JSLint http://www.JSLint.com/
JavaScript与其他语言的差异比您想象的要大得多。观看这个很棒的谷歌技术讲座,以获得印象:http://www.youtube.com/watch?v=hQVTIJBZook
如何利用好的部分,避免糟糕的部分。
..javascript不是Java:)
很多人从网站开发开始就告诉我javascript就是简单的java!
熟悉至少一个Javascript库(Jquery, Prototype等)。
学习如何使用主要浏览器的调试工具(MSIE 7-8, Firefox, Chrome, Safari)
深入了解这个行业:Douglas Crockford的网站是一个宝库,ajajana.com是一个很好的博客,可以让你了解关于Javascript的新的、有趣的或奇怪的想法。还有很多其他的资源,但这些是对我帮助最大的。
理解Crockford的Javascript:好的部分写的东西是一个很好的假设,一个人是一个体面的JS程序员。
你可以知道如何使用一个好的库,如JQuery,但仍然不知道Javascript隐藏的部分。
另一个注意事项是各种浏览器上的调试工具。JS程序员应该知道如何在不同的浏览器中调试代码。
哦!知道JSLint会完全伤害你的感情!!
知道Javascript最初被称为LiveScript,加上“Java”前缀是出于营销目的,而不是因为Java和Javascript相关(它们并不相关)。
哦,对于拥有大卫·弗拉纳根的Javascript:权威指南的任何版本(这一信息在第2页)。
... 感谢那些之前试图混淆ie4文档的人。all[]和Netscape Navigator 4的文档。在Jquery之前使用layers[]消除了这种痛苦。
编辑:
正如@Kinopiko指出的,JavaScript最初被称为项目Mocha (有消息也认为它被称为项目LiveWire),但人们普遍认为,该语言(由Brendan Eich编写)在1996年初发布时采用Java前缀之前,计划以LiveScript的形式发布。
由于JS是一种函数式语言,一个优秀的JS程序员必须能够写出Y-combinator,并能毫不费力地解释它是如何工作的。
javascript是世界上部署最广泛的语言。(可能)
它可以被禁用。
jQuery。YUI。不是(等等等等)
框架可能很有用,但它们经常隐藏JavaScript和DOM实际工作的细节,这些细节有时很难看。如果你的目标是能够说“我懂JavaScript”,那么在一个框架上投入大量的时间是与此相反的。
这里有一些JavaScript语言的特性,你应该知道它在做什么,不会被发现,但对很多人来说不是很明显:
object.prop和object['prop']是同一个东西(所以你能不能停止使用eval,谢谢);对象属性总是字符串(即使是数组);什么for…in是(和什么它不是)。
object.prop
object['prop']
eval
for
in
Property-sniffing;undefined是什么(和为什么它闻起来);为什么看起来鲜为人知的in操作符是有益的,并且不同于typeof/undefined检查;hasOwnProperty;delete的目的。
undefined
typeof
hasOwnProperty
delete
Number数据类型实际上是一个浮点数;使用浮点数的语言独立困难;避免parseInt八进制陷阱。
Number
parseInt
嵌套函数作用域;在希望避免意外全局变量的作用域中使用var的必要性;如何将作用域用于闭包;闭环问题。
var
全局变量和window属性如何冲突;如何避免全局变量和文档元素在IE中发生冲突;在全局作用域中使用var的必要性也可以避免这种情况。
window
function语句如何作用于' hoist '之前的代码的定义;函数语句与函数表达式的区别;为什么命名函数表达式不应该被使用。
function
构造函数、prototype属性和new操作符是如何工作的;方法的利用这个来创建正常的类/子类/实例系统,你实际上想要的;当您希望使用基于闭包的对象而不是原型时。(大多数JS教程材料在这方面都很糟糕;我花了好几年时间才把它弄明白。)
prototype
new
如何在调用时确定this,而不是绑定;因此,方法传递不像你期望的那样工作其他语言的>;如何使用闭包或Function#bind来解决这个问题。
this
Function#bind
其他ECMAScript第五版特性,如indexOf, forEach和函数式编程方法在Array;如何修复旧浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用,可以获得紧凑、可读的代码。
indexOf
forEach
Array
浏览器和用户代码之间的控制流;同步和异步执行;在控制流内部触发的事件(例如;焦点)与控制返回时发生的事件和超时;如何调用一个像alert这样的假定同步的内置函数最终会导致潜在的灾难性的重入。
alert
跨窗口脚本如何影响instanceof;跨窗口脚本如何影响不同文档之间的控制流;如何postMessage将有望解决这个问题。
instanceof
postMessage
最后两项参见这个答案。
最重要的是,你应该批判性地看待JavaScript,承认由于历史原因,它是一种不完美的语言(甚至比大多数语言都不完美),并避免它最糟糕的故障点。Crockford在这方面的工作绝对值得一读(尽管我并不100%同意他关于“好的部分”是什么)。
对象字面量,因为它们写起来很好。
如果你想成为一个真正的JavaScript忍者,你应该知道完美扼杀JavaScript测试中每个问题的答案。
下面这个例子可以让你胃口大开:
(function f(f){ return typeof f(); })(function(){ return 1; });
这个表达式返回什么? “数量” “定义” “功能” 错误
这个表达式返回什么?
要说“我懂JavaScript”,你应该注意以下几点:
... 关于谷歌Web Toolkit,这意味着你的javascript项目可能会以一种更方便的方式开发。
我强烈推荐阅读Javascript:好的部分
变量是全局的,除非声明为局部的!!
Bad (DoSomething()只被调用10次):
function CountToTen() { for(i=0; i< 10; i++) { DoSomething(i); } } function countToFive() { for(i=0; i<5; i++) { CountToTen(); } } CountToFive();
好(DoSomething()按预期被调用50次):
function CountToTen() { var i; for(i=0; i< 10; i++) { DoSomething(i); } } function countToFive() { var i; for(i=0; i<5; i++) { CountToTen(); } } CountToFive();
以下几点也很重要:
1)可变提升。 2)作用域链和激活对象
然后是这样的::)
3) wtfjs.com
4) 一切都是一个对象http://www.lifeinafolder.com/images/Js.jpg
在阅读了以上所有内容之后,通过使用jQuery这样的框架来学习Javascript也是非常好。事实上,这是很多人开始接触JS的第一种方式。这并不可耻。
如果你不知道以下内容,你就不懂JavaScript:
每个javascript程序员都应该知道什么?
不如这样,我只需点击两下就能关掉你的努力。所以,如果可能的话,提供一个后备方案。
Javascript不是一个小时就能学会的!
你知道javascript,如果你能有效地使用数组,数字,字符串,日期和对象。为Math和RegExp加分。你应该能够编写函数和使用变量(在正确的范围内,即作为对象的“方法”)。
我看到一些关于了解闭包的评论,奢侈的函数语法,blabla。所有这些都与这个问题无关。这就好比说,如果你能在11秒内跑完100米,你就是一名跑步者。
我说可能需要几周的时间来精通javascript。在那之后,你需要花费数年时间,阅读数十本书,编写数千行程序,才能成为专家、忍者等等。
但这不是问题所在。
对了,DOM不是javascript的一部分,jQuery也不是。所以我认为两者都与这个问题无关。
with()
throw
在Javascript中,性能很重要。
没有智能编译器来优化你的代码,所以你应该更小心,当你写javascript代码比语言像c#, Java…
真正学好一门语言并理解它的各种怪癖来自(多年的)经验。如果你想成为一个更好的程序员,我会说,了解设计模式,如何以及何时使用它们,甚至在你没有意识到的情况下使用它们;技术架构&用户体验。
了解(JavaScript)语言意味着您可以随意选择并使用任何框架。您将不可避免地需要深入到源代码中,如果您所知道的只是一个框架或2或3的语法,那么您不会走得太远。话虽如此,了解几个不同框架的源代码可能是了解如何使用JavaScript的最佳方法之一。通过在Firebug或Web Inspector中逐步检查代码,然后检查JavaScript文档,特别是Mozilla和Webkit文档,以进一步了解您正在查看的内容。
了解面向对象和函数式编程之间的区别,了解JavaScript是两者的完美结合,以及何时以及如何使用这两者来创建杀手级代码库和出色的应用程序,将使你成为更好的JavaScript程序员。
简单地阅读一些书籍,尤其是Crockford的“good parts”,它只展示了他对JavaScript中什么是好的观点,而跳过JavaScript的大部分“AWESOME”部分会让你一开始就走错了路。
另一方面,看看像Thomas Fuchs这样的人写的代码会让你更深入地了解编写令人惊叹和高效的JavaScript的力量。
试图记住一些陷阱或wtf也不会有多大帮助,如果你开始编码并逐步浏览一个库/框架的代码,特别是一个有帮助的注释的代码,你会发现为什么他们使用某些属性/值,而不是其他为什么以及什么时候使用特定的操作数和操作符是好的,这些都存在于框架的代码中。有什么比以身作则更好呢?: ^)
数组。length方法不是数组项的计数,而是最高索引。即使该项被设置为undefined
length
var a = []; a.length; // === 0 a[10]; // === undefined a[10] = undefined; a.length; // === 11 a.pop(); // === undefined a.length; // === 10
这种行为很难与语言设计错误区分开来。