javascript - 了解 JavaScript - 资源

标签 javascript video

使用 StackOverflow 的微型 Diggit/Blog 功能描述了 here :

我想发布以下我刚刚看到的 Google 技术谈话视频,我觉得它很有趣。

我一直无法理解 javascript 的“本质”。

在这里,JavaScript good parts由 Douglas Crockford 描述

希望您觉得此链接有用。

现在是问题部分:

您对 javascript 有什么提示? 您是否使用 IDE 进行 JavaScript 编辑? 您认为该视频有助于理解“好的部分”吗?

最佳答案

JavaScript:不好的部分。

  1. 最大的错误是延迟错误检测。 JavaScript 会很乐意让你访问一个不存在的对象成员,或者将错误数量的参数传递给一个函数,并用“未定义”的对象来填补空白,除非你故意检查它们(这是不切实际的到处做), 将导致异常或稍后生成意外值。可能在很久以后,导致细微且难以调试的错误出现在实际问题代码附近。这些条件应该会产生异常,除了 JS 最初没有异常可以引发。 “undefined”是我们现在坚持使用的一种快速而肮脏的 hack。

  2. 默认为全局范围的未声明变量。这几乎不是您想要的,并且当两个函数都忘记了“var”并开始欺骗同一个全局变量时,可能会导致微妙且难以调试的错误。

  3. 即使对于基于原型(prototype)的 OO 语言,构造函数的模型也很奇怪,甚至会让有经验的用户感到困惑。忘记"new"会导致微妙且难以调试的错误。虽然您可以用它制作一个合格的类/实例系统,但没有标准,而且人们仍在使用的早期教程中提出的大多数类系统都非常不充分,并且混淆了 JavaScript 的内容实际上是在做。

  4. 缺少绑定(bind)方法。在调用“object.method”时访问“object.method”会与“this”中的“object”建立神奇的联系,但将“object.method”作为引用传递会失去联系,这是完全不直观的;没有其他语言以这种方式工作。当这种情况发生时,“this”被设置为一个意外的值,但它不是“undefined”或其他会引发异常的东西。相反,所有属性访问都在“窗口”上结束,从而导致以后出现微妙且难以调试的错误。

  5. 没有整数类型。数字看起来像一个,但以各种方式分解(例如,n+1==n 表示足够大的 n)。任何时候 NaN 或 Infinity 偷偷溜进来(如果你认为你正在处理整数,那是非常出乎意料的)你不会立即发现;相反,会出现细微且难以调试的错误。

  6. 没有关联数组类型。对象看起来像一个,但在各种意想不到的键下崩溃了。数组不是纯粹的列表。每当您使用“for...in”时,您都可能陷入陷阱,并且会遇到...是的,微妙且难以调试的错误。

  7. 通常字符串处理不佳,至少对于脚本语言而言。 String.split(, limit) 和 String.replace() 并没有按照您的想法进行操作,导致……您知道。 toString() 的结果通常很差,对调试没有用。与此同时,我们被一大堆认为可能有用的垃圾 Netscape 困住了,比如 String.prototype.blink() 和永远坏掉的 escape()。是的。

  8. 然后浏览器的所有差异(IE 仍然缺少基本对象上的许多基本方法),以及 DOM...

  9. 最后,即使确实发生了异常,它也是隐藏起来的,所以作者甚至不会意识到有什么问题。结果是大多数站点都充满了错误;在 IE 中打开完整的 JavaScript 错误报告,结果无法使用。

一想到新一代程序员正在将这种 tosh 作为第一语言来学习,我就感到害怕。更糟糕的是,他们学习的大部分教程 Material (“我的第一个 AEWsome R0LL0VERZ!”)总是鼓励最糟糕的做法。 ‘javascript:’ URLs,‘eval()’ 用于所有内容,浏览器特定的 DOM 访问……哎呀。

关于javascript - 了解 JavaScript - 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597630/

相关文章:

javascript - 在 Ajax 上加载 Google Chart -- 成功

javascript - 如何在 Handlebars Ember 中定义自定义助手

Javascript:通过键减少/聚合的更简洁方法?

video - ffmpeg 切前 5 秒

c++ - 使用 VideoWriter 从 OpenCV 打开 GStreamer 管道

javascript - 如何在表单中设置操作属性以转到同一html页面中的另一个表单以及如何将第一个表单中的值获取到第二个表单中?

javascript - 如何伪造 UIWebViewNavigationTypeLinkClicked 为 UIWebVIew

audio - 如何让 FFmpeg 在单循环静音视频中自动注入(inject) mp3 音轨?

android - 从 URL 打开流相机

c# - 从 MediaElement 获取视频属性(帧高度、宽度和持续时间)