gat*_*ath 368 javascript programming-languages
每个JavaScript程序员都应该知道一组能够说"我知道JavaScript"的东西吗?
bob*_*nce 590
不是jQuery.不是YUI.不(等等)
框架可能很有用,但它们经常隐藏有关JavaScript和DOM实际工作方式的丑陋细节.如果您的目标是能够说"我知道JavaScript",那么在框架中投入大量时间就与此相反.
这里有一些JavaScript语言功能,你应该知道它们正在做什么而不是被抓住,但对许多人来说并不是很明显:
这object.prop
并object['prop']
是一回事(所以请你停止使用eval
,谢谢); 对象属性总是字符串(即使对于数组); 什么for
...... in
是为了(以及它不是).
物业嗅探; 是什么undefined
(为什么它闻起来); 为什么这个看似鲜为人知的in
运营商是有益的,不同于typeof
/ undefined
检查; hasOwnProperty
; 的目的delete
.
该Number
数据类型是一个真正的浮动; 使用花车的语言独立困难; 避免parseInt
八进制陷阱.
嵌套函数范围; var
在范围内使用你想避免意外全局的必要性; 范围如何用于闭包; 在闭合回路问题.
全局变量和window
属性如何冲突; 全局变量和文档元素不应该如何冲突,而是在IE中发生冲突; var
在全球范围内使用的必要性也是为了避免这种情况.
function
声明如何在前面的代码之前" 提升 "一个定义; 函数语句和函数表达式之间的区别; 为什么不应该使用命名函数表达式.
构造函数如何运作,prototype
属性和new
运算符真正起作用; 方法利用这个来创建普通的类/子类/实例,你其实是想系统; 当你可能想要使用基于闭包的对象而不是原型时.(大多数JS教程材料在这方面都是非常糟糕的;我花了好几年的时间才把它直接放在脑海里.)
如何this
在通话时确定,不受约束; 因此,方法传递如何不像你期望的那样工作 ; 如何关闭或Function#bind
可能用于解决这个问题.
其他ECMAScript第五版的功能indexOf
,forEach
以及功能编程方法Array
; 如何修复旧浏览器以确保您可以使用它们; 使用它们与内联匿名函数表达式来获得紧凑,可读的代码.
浏览器和用户代码之间的控制流程; 同步和异步执行; 在控制流(例如焦点)内发生的事件与控制返回时发生的事件和超时; 如何调用一个所谓的同步内置结构alert
最终会导致潜在的灾难性重入.
跨窗口脚本如何影响instanceof
; 跨窗口脚本如何影响跨不同文档的控制流; 怎么postMessage
会有希望解决这个问题.
有关最后两项,请参阅此答案.
最重要的是,你应该批判性地查看JavaScript,承认它是历史原因的一种不完美的语言(甚至超过大多数语言),并避免其最糟糕的麻烦.克罗克福德在这方面的工作绝对值得一读(虽然我并不是100%同意他的"好零件").
gra*_*ine 248
它可以被禁用.
小智 75
理解用Crockford的Javascript编写的东西:好的部分是一个很好的假设,一个人是一个体面的JS程序员.
您几乎可以知道如何使用像JQuery这样的好库,但仍然不知道Javascript的隐藏部分.
另一个注意事项是各种浏览器上的调试工具.JS程序员应该知道如何在不同的浏览器中调试他的代码.
哦! 知道JSLint会完全伤害你的感情!
Ski*_*ick 49
如果你想成为一个真正的JavaScript忍者,你应该知道Perfection杀死JavaScript测验中每个问题的答案.
一个激发你胃口的例子:
(function f(f){
return typeof f();
})(function(){ return 1; });
Run Code Online (Sandbox Code Playgroud)
这个表达式返回了什么?
- "数"
- "不确定"
- "功能"
- 错误
edw*_*win 46
如果你不知道,你不懂JavaScript:
Sri*_*nan 37
..这个javascript不是java :)
很多很多人从网站开发开始都告诉我javascript只是简单的java!
Dav*_*vid 27
熟悉至少一个Javascript库(Jquery,Prototype等).
了解如何使用主流浏览器的调试工具(MSIE 7-8,Firefox,Chrome,Safari)
阅读行业:Douglas Crockford的网站是一个宝库,而Ajaxian.com是一个很好的博客,可以跟上Javascript的新的,有趣的或奇怪的想法.还有很多其他资源,但那些资源对我帮助最大.
the*_*rty 23
变量是全球变量,除非声明为本地变量!!
坏(DoSomething()只被调用10次):
function CountToTen()
{
for(i=0; i< 10; i++)
{
DoSomething(i);
}
}
function countToFive()
{
for(i=0; i<5; i++)
{
CountToTen();
}
}
CountToFive();
Run Code Online (Sandbox Code Playgroud)
好(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();
Run Code Online (Sandbox Code Playgroud)
要知道Javascript最初被称为LiveScript,并且出于营销目的附加了"Java"前缀,而不是因为Java和Javascript是相关的(它们不是).
哦,拥有任何版本的David Flanagan的"Javascript:The Definitive Guide"(此信息在第2页).
...并且为了欣赏那些曾经试图混淆Internet Explorer 4的document.all []和Netscape Navigator 4的document.layers []之前的那些,在Jquery之前带走了痛苦.
编辑:
正如@Kinopiko指出JavaScript最初被称为项目Mocha(一些消息来源也认为它被称为项目LiveWire),但人们普遍认为该语言(由Brendan Eich编写)将被定为在Java前缀被采用之前以LiveScript形式发布. 1996年初发布.
人们应该注意以下内容来说"我知道JavaScript":
JavaScript与其他语言的区别远远超出您的想象.观看这个精彩的Google Tech Talk以获得一个印象:http://www.youtube.com/watch?v = hQVTIJBZook
如果你能有效地使用数组,数字,字符串,日期和对象,你就知道javascript.加上Math和RegExp的积分.您应该能够编写函数并使用变量(在正确的范围内,即作为对象的'方法').
我看到一些关于知道闭包,奢侈函数语法,blabla的评论.所有这一切都与这个问题无关.如果你可以在11秒内完成100米短跑,那就像说你是跑步者.
我说可能需要几个星期才能熟练掌握javascript.在此之后,需要数年和数十本书和数千行编程才能成为专家,忍者等.
但那不是问题.
哦,DOM不是javascript的一部分,也不是jQuery.所以我认为两者同样与这个问题无关.
归档时间: |
|
查看次数: |
79181 次 |
最近记录: |