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

2020/09/30 04:41 · javascript ·  · 0评论

每个JavaScript程序员都应该具备能够说“我知道JavaScript”的东西吗?

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

框架可能很有用,但是它们经常隐藏一些关于JavaScript和DOM实际工作方式的丑陋细节。如果您的目标是能够说“我知道JavaScript”,那么在框架上投入大量时间是相反的。

以下是一些JavaScript语言功能,您应该了解这些功能在做什么并且不会被吸引住,但是对于许多人来说,它们并不是立即显而易见的:

  • object.propobject['prop']是同一件事(所以请您停止使用eval,谢谢);对象属性始终是字符串(即使是数组);什么for......in(和什么不是)。

  • 嗅探财产;什么undefined是(以及为什么闻到);为什么看似鲜为人知的in操作员是有益的并且不同于typeof/undefined检查;hasOwnProperty; 目的delete

  • Number数据类型是一个真正的浮动; 使用浮点数与语言无关的困难;避免parseInt八进制陷阱。

  • 嵌套函数作用域;var您要避免意外的全局范围内使用的必要性范围如何用于闭包;闭合回路问题

  • 全局变量和window属性如何碰撞;全局变量和文档元素如何在IE中不冲突,而又如何冲突?也必须var在全球范围内使用以避免这种情况。

  • function语句如何在定义之前的代码之前提升”定义;函数语句和函数表达式之间的区别;为什么不应该使用命名函数表达式

  • 构造函数的功能,prototype属性和new运算符的工作方式;利用此方法创建您实际想要的普通类/子类/实例系统的方法;当您可能想使用基于闭包的对象而不是原型时。(对此,大多数JS教程材料绝对可怕;我花了好几年才把它弄清楚。)

  • this通话时如何确定,不受限制;因此,方法传递不像您期望的其他语言那样有效;如何关闭或Function#bind可以用来解决这个问题。

  • 其他的ECMAScript第五版功能,比如indexOfforEach与功能编程的方法Array; 如何修复旧版浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用,以获取紧凑的可读代码。

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

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

有关最后两个项目,请参见此答案

最重要的是,您应该批判性地查看JavaScript,并承认由于历史原因,它是一种不完善的语言(甚至比大多数语言还多),并且避免了最糟糕的麻烦。克罗克福德在这方面的工作绝对值得一读(尽管我并不100%同意他所说的“好零件”)。

可以禁用它。

了解Crockford的Javascript:The Good Parts中的内容是一个很好的假设,即一个人是一个不错的JS程序员。

您几乎可以知道如何使用类似JQuery的良好库,而仍然不了解Javascript的隐藏部分。

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

哦! 而且知道JSLint会完全伤害您的感觉!

如果您想成为一名真正的JavaScript忍者,则应该了解Perfection Kills JavaScript Quiz中每个问题的答案

激发食欲的一个例子:

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

此表达式返回什么?

  • “数”
  • “未定义”
  • “功能”
  • 错误

如果您不知道,就不会使用JavaScript:

  1. 关闭
  2. 基于原型的继承
  3. 模块模式
  4. W3C-DOM
  5. 活动如何运作

..那个javascript不是java :)

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

  1. 熟悉至少一个Javascript库(Jquery,Prototype等)。

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

  3. 阅读行业:Douglas Crockford的网站是一个宝库,而Ajaxian.com是一个很好的博客,可以跟上Javascript的新的,有趣的或奇怪的想法。还有许多其他资源,但是这些资源对我的帮助最大。

Javascript对象和函数充当一等公民,即回调,而不是忘记事件,然后是JQuery

那不是一个小时就能学到的Java语言!

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

错误(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();

如何使用优质零件,以及如何避免不良零件

因为知道Javascript最初被称为LiveScript,并且为营销目的附加了“ Java”前缀,并不是因为Java和Javascript是相关的(它们没有关联)。

哦,并且拥有David Flanagan的“ Javascript:The Definitive Guide”的任何版本(此信息在第2页上)。

...并感谢那些在试图消除Jquery之类的麻烦之前试图混淆Internet Explorer 4的document.all []和Netscape Navigator 4的document.layers []的人。

编辑:

正如@Kinopiko指出的那样,JavaScript最初被称为Project Mocha(一些消息来源还认为它被称为LiveWire项目),但是人们普遍接受该语言(由Brendan Eich编写)在使用Java前缀之前被定为LiveScript。在1996年初发行。

应该注意以下几句话:“我知道JavaScript”:

  1. JavaScript不错,但DOM是痛点
  2. 跨浏览器问题可能会让您发疯
  3. 除非在至少4种不同的优秀浏览器上对代码进行了测试,否则不能说没有bug
  4. 关闭..............一定要知道
  5. 它的原型基于...........不错,学习它很有趣
  6. 调试器关键字.....帮助应对危机

JavaScript与其他语言的差异比您想象的要大得多。观看这场精彩的Google技术讲座,以留下深刻的印象:http : //www.youtube.com/watch?v=hQVTIJBZook

每个JavaScript程序员应该知道什么?

怎么样,我可以点击2下关闭您的工作。因此,如果可能的话,请提供一个备用。

我强烈建议您阅读Javascript:优秀部分

您知道javascript是否可以有效使用数组,数字,字符串,日期和对象。加上Math和RegExp的分数。您应该能够编写函数并使用变量(在正确的范围内,即作为对象的“方法”)。

我看到一些有关了解闭包,奢侈的函数语法,等等的评论。这与这个问题完全无关。这就像说如果您可以在11秒内跑完100m短跑,您就是赛跑者。

我说精通javascript可能需要几个星期。之后,要成为专家,忍者等人,需要花费数年的时间,数十本书和数千行编程。

但这不是问题。

哦,DOM不是javascript的一部分,jQuery也不是。因此,我认为两者同样与这个问题无关。

JSLint http://www.JSLint.com/

阅读了以上所有内容之后,通过使用类似jQuery的框架学习Javascript非常好事实是,这是许多人首先选择JS的第一种方法。没什么可耻的。

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

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

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

jQuery是我最好的建议。不只是代码本身,最​​值得模仿的是习惯用法,样式和背后的思想。

该javascript是世界上使用最广泛的语言。(大概)

真正学习一门语言并理解其各种怪癖来自(多年的)经验。如果您想成为一个更好的程序员,我会说,了解设计模式,如何以及何时使用它们,和/或什至在没有意识到的情况下使用它们。技术架构和用户体验。

知道(JavaScript)语言意味着您可以选择任何框架并随意使用。您将不可避免地需要深入研究源代码,并且如果您只知道语法是框架还是2或3,那么您将走得很远。话虽如此,进入几个不同框架的源代码可能是了解如何使用JavaScript的最佳方法之一。逐步解决Firebug或Web Inspector中的代码,然后检查JavaScript文档,尤其是Mozilla和Webkit文档,以进一步了解您正在查看的内容。

了解面向对象编程和函数式编程之间的区别,JavaScript是两者的完美结合,何时以及如何使用它们来创建杀手级代码库和出色的应用程序将使您成为更好的JavaScript程序员。

只需阅读一些书,尤其是Crockford的“好书”,只介绍他对JavaScript的好处的看法,而跳过大部分JavaScript的令人敬畏的书本会让您误入歧途。

另一方面,查看由Thomas Fuchs之类的人编写的代码,将使您对编写出色而高效的JavaScript的力量有更多的了解。

试图记住一些陷阱或WTF也无济于事,如果您开始编码并逐步浏览库/框架的代码,特别是在注释中有帮助的代码,就会发现它们为什么会使用某些东西。属性/值,而不是其他原因/为什么以及何时使用特定的操作数和运算符比较好,这一切都在框架的人员使用的代码中。有什么比通过榜样学习更好?:^)

在Javascript中,性能至关重要。

没有智能的编译器可以优化您的代码,因此在编写JavaScript代码时应比C#,Java等语言更加小心。

对象文字,因为它们写得太好了。

以下内容也很重要:

1)可变吊装。2)范围链和激活对象。

然后像这样的事情::)

3)wtfjs.com

4)一切都是对象http://www.lifeinafolder.com/images/Js.jpg

  1. 知道有没有有生命,with()在哪里划界。
  2. 您可以使用该throw语句创建自定义错误,以有目的地停止javascript运行时。

JavaScript不支持使用换行符分隔return关键字和return语句,如以下代码(或在我的jsFiddle页面上尝试

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

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

PS。我已经写了将近6年的JavaScript。但是,当我尝试执行以下功能时,我只是发现了这个错误。它总是返回未定义的。当我使用调试器并进入此功能时,一切正常。我认为这应该是我一生中最糟糕的编程错误。

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') : '');
}

由于JS是一种功能语言,因此,一个体面的JS程序员必须能够编写Y-combinator并解释其工作原理。

...关于Google Web Toolkit,这意味着您的javascript项目可能会以更加方便的方式进行开发。

本文地址:http://javascript.askforanswer.com/meigejavascriptchengxuyuanyinggaizhidaoshenmeguanbi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!