使用这里描述的StackOverflow的微小Diggit/Blog功能:
我想发布以下我刚看到的Google技术谈话视频,我发现它非常有趣.
我一直有理解javascript"自然"的问题.
在这里,Douglas Crockford描述了JavaScript好的部分
我希望你觉得这个链接很有用.
现在问题部分:
你对javascript的抱怨是什么?你是否使用IDE进行javascript编辑?你认为这个视频有助于理解"好的部分"吗?
JavaScript:坏的部分.
最大的错误是后期错误检测.JavaScript很乐意让你访问一个不存在的对象成员,或者将错误数量的参数传递给一个函数,并用'undefined'对象填补空白,除非你刻意检查它们(这对于继续在各处做是不切实际的) ),将导致异常或稍后生成意外值.可能很久以后,导致在实际问题代码附近出现的细微且难以调试的错误.这些条件应该生成异常,除了JS最初没有引发异常.'undefined'是一个快速而肮脏的黑客,我们现在被困住了.
未声明的变量默认为全局范围.这几乎不是你想要的,并且当两个函数都忘记'var'并开始使用相同的全局时,会导致细微且难以调试的错误.
即使对于基于原型的OO语言,构造函数的模型也很奇怪,甚至使有经验的用户感到困惑.忘记'new'会导致细微且难以调试的错误.虽然你可以创建一个可通过的类/实例系统,但是没有标准,并且人们仍在使用的早期教程中提出的大多数类系统都非常不合适,并且混淆了JavaScript实际上在做什么.
缺乏约束方法.在调用它时访问"object.method"与'this'中的'object'进行魔术连接完全不直观,但是传递"object.method"作为引用会失去连接; 没有其他语言这样工作.当发生这种情况时,'this'被设置为一个意外的值,但它不是'undefined'或其他会引发异常的东西.相反,所有属性访问都会在"窗口"上结束,以后会导致细微且难以调试的错误.
没有整数类型.数字看起来像一个但以各种方式分解(例如,n + 1 == n足够高的n).任何时候NaN或Infinity都会潜入(如果您认为自己正在处理整数,则非常意外),您将无法立即发现; 相反,将会出现细微且难以调试的错误.
没有关联数组类型.对象看起来像一个,但在各种意外的键下分解.数组不是纯列表.任何时候你使用'for ... in',你可能陷入陷阱,并且会经历......是的,微妙且难以调试的错误.
通常是糟糕的字符串处理,至少对于脚本语言.String.split(,limit)和String.replace()没有做你想象的事情,导致......你知道.toString()的结果通常很差,对调试没有用.与此同时,我们遇到了一堆垃圾Netscape认为可能有用,比如String.prototype.blink(),以及永久损坏的escape().好极了.
而随后还有所有的浏览器的差异(IE仍缺少大量的对基本对象基本方法),和DOM ...
最后,即使发生异常,它也会远离视图,因此作者甚至不会意识到出现了问题.结果是大多数网站都充满了错误; 在IE中打开完整的JavaScript错误报告,结果无法使用.
让我觉得新一代程序员正在学习这种语言作为第一语言让我感到害怕.更糟糕的是,他们正在学习的大部分教程材料("我的文章AEWsome R0LL0VERZ!")总是鼓励最糟糕的做法.'javascript:'URL,'eval()'用于所有内容,特定于浏览器的DOM访问... oy.