代码之家  ›  专栏  ›  技术社区  ›  chrisofspades

每个javascript程序员应该知道什么?[关闭]

  •  368
  • chrisofspades  · 技术社区  · 6 年前

    每个javascript程序员都应该知道一套可以说“我知道javascript”的东西吗?

    30 回复  |  直到 13 年前
        1
  •  590
  •   Jordi    8 年前

    不是jQuery。不是YUI。不(等)

    框架可能是有用的,但它们常常隐藏了JavaScript和DOM如何实际工作的一些有时不好的细节。如果你的目标是能够说我知道javascript,那么在一个框架中投入大量时间是反对的。

    下面是一些你应该知道的javascript语言特性,它们可以让你摸索它在做什么,而不会被人发现,但对很多人来说,这并不是显而易见的:

    • object.prop object['prop'] 是一样的吗(所以你能不能停止使用 eval ,谢谢);对象属性始终是字符串(即使对于数组也是如此); what for ... in is for (和) what it isn't )

    • 财产嗅探;什么 undefined IS(和) why it smells )为什么看起来鲜为人知 在里面 经营者是有益的,与 typeof / 未定义 检查; hasOwnProperty ;目的 delete .

    • Number 数据类型实际上是一个float;使用float时与语言无关的困难;避免 parseInt 八进制陷阱。

    • 嵌套函数范围;使用的必要性 var 在范围中,您希望避免意外的全局;范围如何用于闭包;范围 closure loop problem .

    • 如何全局变量和 window 属性冲突;全局变量和文档元素如何不应冲突,而应在IE中进行冲突;使用的必要性 var 在全局范围内也要避免这一点。

    • 如何 function 声明行为到__ hoist _ should not be used .

    • 构造器如何工作, prototype 财产和 new 操作员真的工作了; methods 利用它来创建实际需要的普通类/子类/实例系统;当您可能希望使用基于闭包的对象而不是原型时。(大多数JS教程的材料在这方面都非常糟糕;我花了很多年才把它弄清楚。)

    • 怎么 this 在调用时确定,而不是绑定;因此方法如何传递 doesn't work like you expect 来自其他语言;如何关闭或 Function#bind 可能是用来解决这个问题的。

    • 其他EcmaScript第五版功能,如 indexOf , forEach 以及功能编程 methods on Array ;如何修复旧的浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用以获得紧凑、可读的代码。

    • 浏览器和用户代码之间的控制流;同步和异步执行;在控制流内部触发的事件(如焦点)与控件返回时发生的事件和超时;如何调用假定的同步内置 alert 最终会导致潜在的灾难性的重新进入。

    • 跨窗口脚本如何影响 instanceof ;跨窗口脚本如何影响跨不同文档的控制流;如何 postMessage 希望能解决这个问题。

    this answer 关于最后两项。

    最重要的是,您应该批判地查看JavaScript,承认它是一种不完美的语言(甚至比大多数语言都要多),并避免它最糟糕的麻烦点。克罗克福德在这方面的工作绝对值得一读(尽管我不完全同意他认为好的部分是什么)。

        2
  •  248
  •   graphicdivine    15 年前

    它可以被禁用。

        3
  •  75
  •   bron    15 年前

    理解用克罗克福德语写的东西 Javascript: The Good Parts 是一个相当好的假设,一个人是一个体面的JS程序员。

    你几乎可以知道如何使用一个好的库,比如jquery,但仍然不知道javascript的隐藏部分。

    另一个注意事项是在各种浏览器上调试工具。JS程序员应该知道如何在不同的浏览器中调试他的代码。

    哦!而知道杰斯林会完全伤害你的感情!!

        4
  •  49
  •   Skilldrick    15 年前

    如果你想成为一个真正的javascript忍者,你应该知道所有问题的答案。 Perfection kills JavaScript Quiz .

    激发食欲的一个例子:

    (function f(f){ 
      return typeof f(); 
    })(function(){ return 1; });
    

    这个表达式返回什么?

    • __编号__
    • _未定义__
    • _功能__
    • 误差
        5
  •  46
  •   edwin    15 年前

    如果你不知道,你就不知道javascript:

    1. 闭包
    2. 基于原型的继承
    3. 模块模式
    4. W3C-DOM
    5. 事件如何运作
        6
  •  37
  •   Sripathi Krishnan    15 年前

    ……JavaScript不是Java:

    很多人从网站开发开始就告诉我JavaScript只是简单的Java!

        7
  •  27
  •   David    15 年前
    1. 至少熟悉一个javascript库(jquery、原型等)。

    2. 了解如何使用主要浏览器的调试工具(MSIE 7-8、Firefox、Chrome、Safari)

    3. 阅读业内消息:道格拉斯·克罗克福德的网站是一个宝库,而Ajaxian.com是一个很好的博客,可以跟上新的、有趣的或古怪的javascript想法。还有很多其他资源,但这些资源对我帮助最大。

        8
  •  24
  •   Sarfraz    15 年前

    JavaScript 对象和功能 作为 一等公民 , 回调 ,不要忘记 事件 然后 JQuery .

        9
  •  24
  •   Ashwin Prabhu    15 年前

    Javascript不是一个小时就能学会的东西!

        10
  •  23
  •   theycallmemorty    15 年前

    除非声明为本地变量,否则变量是全局变量!!

    错误(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();
    
        12
  •  8
  •   amelvin    15 年前

    因为知道最初的javascript被称为 生活剧本 而“Java”前缀是为了营销目的而附加的,不是因为Java和JavaScript是相关的(它们不是)。

    拥有大卫·弗拉纳根的任何版本 'javascript:最终指南' (此信息见第2页)。

    …感谢那些之前试图混淆Internet Explorer 4的文档.all[]和Netscape Navigator 4的文档.layers[]的人,在jquery之类的东西消除了痛苦。

    编辑:

    正如@kinopiko指出的,javascript最初被称为项目mocha( some sources 还认为它被称为项目LIVEWORE),但人们普遍认为,在1996年初发布的Java前缀之前,该语言(布兰登·艾奇编写的)被定义为LIFEScript。

        13
  •  8
  •   Bartek Szabat    15 年前

    要说“我知道javascript”,应该注意以下几点:

    1. javascript很好,但是 DOM是痛点
    2. 跨浏览器问题 会让你发疯的
    3. 除非代码是 在至少4种不同的好浏览器上测试 你不能说它没有漏洞
    4. 关闭 ……必须知道
    5. 它的 基于原型 ……不错,学这个很有趣
    6. 调试器 关键字…帮助危机
        14
  •  7
  •   ericteubert    15 年前

    这个javascript与其他语言的差异比你想象的要大得多。观看这场伟大的谷歌科技谈话,获得一个印象: http://www.youtube.com/watch?v=hQVTIJBZook

        15
  •  7
  •   Khainestar    15 年前

    每个javascript编码人员都应该知道什么?

    怎么样,我可以通过两次单击关闭您的工作。因此,如果可能,请提供回退。

        16
  •  6
  •   Sungguk Lim    15 年前

    我强烈建议阅读 Javascript: The Good Parts

        17
  •  6
  •   Michiel van der Blonk    15 年前

    如果您能有效地使用数组、数字、字符串、日期和对象,您就知道JavaScript了。数学和regexp的加分。您应该能够编写函数和使用变量(在正确的范围内,即作为对象的“方法”)。

    我看到一些关于知道闭包、冗长的函数语法、blablabla的评论。这与这个问题完全无关。这就好比说,如果你能在11秒内跑完100米,你就是一个跑步者。

    我说,要精通JavaScript可能需要几周时间。在那之后,要成为一名专家、忍者等需要数年、数十本书和数千行程序。

    但这不是问题。

    噢,dom不是javascript的一部分,jquery也不是。所以我认为这两个问题也同样无关。

        18
  •  4
  •   Richard Inglis    15 年前
        19
  •  4
  •   Soup    15 年前

    读完以上所有内容后,它也 完全精细 使用jquery这样的框架来学习javascript。事实上,这是很多人第一次使用JS的第一种方式。 没什么可耻的。

        20
  •  4
  •   VoidPointer    14 年前

    数组 . length 方法不是数组项的计数,而是最高索引。即使项目设置为 undefined

    var a = [];
    a.length;   // === 0
    a[10];      // === undefined
    a[10] = undefined;
    a.length;   // === 11
    a.pop();    // === undefined
    a.length;   // === 10
    

    这种行为很难与语言设计错误区分开来。

        21
  •  3
  •   duffymo    15 年前

    jquery是我最好的建议。不仅对于代码本身,最值得效仿的是习惯用法、风格和背后的思想。

        22
  •  3
  •   zaf    15 年前

    Javascript是世界上部署最广泛的语言。(可能)

        23
  •  3
  •   christos constandinou    14 年前

    学好一门语言,了解它的各种怪癖,都来自(多年)的经验。如果你想成为一个更好的程序员,我会说,理解设计模式,如何和何时使用它们,甚至当你在使用它们时,却没有意识到它;技术架构和用户体验。

    了解(javascript)语言意味着您可以随意选择并使用任何框架。您将不可避免地需要深入到源代码中,如果您所知道的只是语法A框架或2或3,那么您将不会走得太远。这么说来,了解几个不同框架的源代码可能是了解如何使用JavaScript的最佳方法之一。通过在Firebug或WebInspector中逐步浏览代码,然后检查JavaScript文档,尤其是Mozilla和WebKit文档,来进一步了解您所看到的内容。

    了解面向对象编程和功能编程之间的区别,javascript是两者的性感组合,以及何时以及如何使用两者创建杀手级的代码库和出色的应用程序将使您成为更好的javascript程序员。

    简单地阅读一些书籍,尤其是Crockford的“好的部分”,这仅仅是他对javascript中好的部分的看法,而跳过javascript中的大部分精彩部分会让你走错路。

    另一方面,通过查看像ThomasFuchs这样的人编写的代码,您将更深入地了解编写令人惊叹且高效的JavaScript的能力。

    尝试记忆几个gotcha或wtfs也不会有太大帮助,如果你开始编码并逐步浏览库/框架的代码,特别是一个有帮助的注释代码,你会发现它们为什么使用了某些属性/值,而不是其他的,为什么以及当使用特定的操作数和运算符是好的时候,这些都在那里。在框架的代码中人们使用。有什么比以身作则更好呢?^)

        24
  •  2
  •   mcaaltuntas    15 年前

    在JavaScript中,性能很重要。

    没有一个智能编译器来优化代码,所以在编写JavaScript代码时要比C语言、Java语言更仔细。

        25
  •  1
  •   poo    15 年前

    对象文本,因为它们写起来很好。

        26
  •  0
  •   rajat    15 年前

    以下事项也很重要:

    1)变吊。 2)作用域链和激活对象。

    然后像这样的事情::)

    3) wtfjs.com

    4) everything is an object http://www.lifeinafolder.com/images/Js.jpg

        27
  •  0
  •   Ramesh César Landesa    15 年前
    1. 知道有一种生活有没有 with() 在哪里画线。
    2. 可以使用创建自定义错误 throw 语句以有意停止JavaScript运行时。
        28
  •  -1
  •   Soul_Master    14 年前

    javascript不支持分隔 返回 关键字和带有换行符的RETURN语句,如以下代码(或在 my jsFiddle page )

    function foo()
    {
        return
        {
            bar: 'something'
        };
    }
    
    $(function()
    {
        document.write(foo());
    });
    

    我不明白为什么javascript不支持这种样式,因为与默认的javascript样式相比,它更容易读取非常复杂的javascript源代码。

    我已经写了将近6年的javascript。但是我在尝试执行以下函数时发现了这个bug。它总是返回未定义的。当我使用调试器并单步执行此函数时,一切都正常工作。我认为这应该是我生命中最糟糕的编程错误。

    function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
    {
        return 
            (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
            (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
            (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
            (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
    }
    
        29
  •  -3
  •   user187291    15 年前

    因为JS是一种功能性语言,一个优秀的JS程序员必须能够编写Y组合器并解释它是如何工作的。

        30
  •  -5
  •   Viktor Sehr    15 年前

    …关于 Google Web Toolkit 这意味着您的javascript项目可能可以以更为方便的方式开发。