ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript - 世界で最も誤解されている言語分析_JavaScript スキル

JavaScript - 世界で最も誤解されている言語分析_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 19:10:43911ブラウズ

JavaScript,是世界上最流行的编程语言之一。事实上世界上的每一台个人电脑都安装并在频繁使用至少一个JavaScript解释器。JavaScript的流行完全是由于他在WWW脚本语言领域中的地位决定的。


Despite its popularity, few know that JavaScript is a very nice dynamic object-oriented general-purpose programming language. How can this be a secret? Why is this language so misunderstood?

尽管它很流行,但是很少有人知道JavaScript是一个非常棒的动态面向对象通用编程语言。这居然能成为一个秘密!这门语言为什么被误解如此之深?



The Name

名字

The Java- prefix suggests that JavaScript is somehow related to Java, that it is a subset or less capable version of Java. It seems that the name was intentionally selected to create confusion, and from confusion comes misunderstanding. JavaScript is not interpreted Java. Java is interpreted Java. JavaScript is a different language.

Java- 前缀很容易使人联想到Java,并认为它是Java的子集或简化版的Java。看起来最初给它选这个名字是别有用心的,是故意混淆概念、故意制造"误解"的。JavaScript不是解释执行的Java。Java是解释执行的Java。JavaScript是另外一种语言。


JavaScript has a syntactic similarity to Java, much as Java has to C. But it is no more a subset of Java than Java is a subset of C. It is better than Java in the applications that Java (fka Oak) was originally intended for.

JavaScript的语法和Java有相似之处,这就像Java的语法和C很相像一样。但是它不是Java的子集,就像Java不是C的子集一样。它在Java(Oak)最初打算进军的领域中比Java更好。


JavaScript was not developed at Sun Microsystems, the home of Java. JavaScript was developed at Netscape. It was originally called LiveScript, but that name wasn't confusing enough.

JavaScript不是Sun Microsystems的产品,Sun是Java的家。JavaScript是在Netscape被开发出来的。它最初叫LiveScript,嗯……还是这个名字好。


The -Script suffix suggests that it is not a real programming language, that a scripting language is less than a programming language. But it is really a matter of specialization. Compared to C, JavaScript trades performance for expressive power and dynamism.

-Script后缀让人认为他不是一门真正的编程语言,和一门"编程语言"还有相当的差距。但是这只是应用领域的问题。和C相比,JavaScript是牺牲了性能但换来了丰富的表现力和灵活的形态。


Lisp in C's Clothing

披着C皮的Lisp

JavaScript's C-like syntax, including curly braces and the clunky for statement, makes it appear to be an ordinary procedural language. This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java. It has arrays instead of lists and objects instead of property lists. Functions are first class. It has closures. You get lambdas without having to balance all those parens.

JavaScript的类C语法,包括大括号和语句的形式,让它看起来像普通的面向过程编程语言。这是一种误解,因为JavaScript和函数式语言,比如 Lisp 或 Scheme,有更多的相似之处,而不是和C或Java。它使用数组而不是列表,使用对象而不是属性列表。函数是第一位的,它有闭包(closures),另外你还可以使用lambda表达式。

 




Typecasting

类型转换

JavaScript was designed to run in Netscape Navigator. Its success there led to it becoming standard equipment in virtually all web browsers. This has resulted in typecasting. JavaScript is the George Reeves of programming languages. JavaScript is well suited to a large class of non-Web-related applications

JavaScript最初被设计成在Netscape Navigator中运行,它在Navigator中的成功引领它成为事实上所有web浏览器的标准装备。这就造就了"类型转换"。JavaScript是编程语言中的 George Reeves(超人),是大量非web程序的称职之选。




Moving Target

移动靶

The first versions of JavaScript were quite weak. They lacked exception handling, inner functions, and inheritance. In its present form, it is now a complete object-oriented programming language. But many opinions of the language are based on its immature forms.

JavaScript的最初几版非常弱,没有异常处理,没有内部函数和继承。现如今,它已经成为完全面向对象的编程语言。但是这门语言的许多思想是基于它不成熟的形式的。


The ECMA committee that has stewardship over the language is developing extensions which, while well intentioned, will aggravate one of the language's biggest problems: There are already too many versions. This creates confusion.

ECMA委员会,这门语言的管家,正在对它进行扩展,也在蓄意恶化它最大的问题:有太多的版本。这是混乱的根源。





Design Errors

设计上的错误

No programming language is perfect. JavaScript has its share of design errors, such as the overloading of + to mean both addition and concatenation with type coercion, and the error-prone with statement should be avoided. The reserved word policies are much too strict. Semicolon insertion was a huge mistake, as was the notation for literal regular expressions. These mistakes have led to programming errors, and called the design of the language as a whole into question. Fortunately, many of these problems can be mitigated with a good lint program.

没有什么编程语言是完美的。JavaScript也有它设计上的错误,比如重载的+号随着类型的不同既表示"相加"又表示"连接",和本该避免的有错误倾向的 with 语句。它的保留字策略过于严格。分号的插入是一个巨大的错误,比如作为字面正则表达式的符号时。这些失误已直接导致编程中的错误,也使这门语言的整体设计遭人质疑。还好,这些问题中有许多都可以在良好的 lint 程序中得以缓解。


The design of the language on the whole is quite sound. Surprisingly, the ECMAScript committee does not appear to be interested in correcting these problems. Perhaps they are more interested in making new ones.

这门语言的整体设计(上的问题)是相当明显的。奇怪的是ECMAScript委员会并没有对修正其中存在的问题表现出太大的兴趣,也许他们更热衷于制造新的问题。


 


Lousy Implementations

糟糕的实现

Some of the earlier implementations of JavaScript were quite buggy. This reflected badly on the language. Compounding that, those implementations were embedded in horribly buggy web browsers.

JavaScript的一些早期实现有许多bug,这反过来对语言本身产生了很坏的影响。更糟糕的是这些满是bug的实现是嵌入在满是bug的web浏览器中的。




Bad Books

糟糕的书

Nearly all of the books about JavaScript are quite awful. They contain errors, poor examples, and promote bad practices. Important features of the language are often explained poorly, or left out entirely. I have reviewed dozens of JavaScript books, and I can only recommend one: JavaScript: The Definitive Guide (4th Edition) by David Flanagan. (Attention authors: If you have written a good one, please send me a review copy.)

几乎所有的JavaScript书都是相当可怕的。它们包含错误,包含不好的例子,并鼓励不好的做法。JavaScript语言的一些重要特性它们要么没有解释清楚,要么根本就没有提及。我看过很多JavaScript的书,但我只能推荐一本:David Flanagan著的 JavaScript: The Definitive Guide (4th Edition)  (《JavaScript权威指南 第四版》)。(作者们请注意:如果你们写出了好书请发给我一份副本,我给你们校对。)




標準以下の標準

標準以下の標準」の標準

この言語の公式仕様は ECMA によって公開されていますが、その仕様は非常に質が低く、作成者が使用できないため、これが Bad Book 問題の一因となっています。 ECMA と TC39 委員会は、この言語に対する理解を向上させるための標準文書を作成することを非常に恥じるべきです。

ECMA が発行する公式言語仕様の品質は非常に悪いです。読みにくいだけでなく、理解するのも非常に難しいです。これらの著者はこの標準文書を使用してこの言語をより深く理解できないため、この標準文書はそれらの「悪い本」に大きく貢献します。 ECMA と TC39 はこれについて非常に当惑するはずです。



アマチュア


アマチュア

JavaScript で書いている人のほとんどはプログラマーではありません。彼らは優れたプログラムを書くための訓練や規律を持っていません。とにかく、JavaScript には便利なことができるほどの表現力があるのです。これは完全にアマチュア向けであり、プロのプログラミングには適していないということです。
JavaScript を使用するほとんどの人はプログラマーではありません。

優れたプログラムを作成するためのトレーニングや訓練を受けていません。 JavaScript は非常に表現力豊かな

であり、それを使用して便利なことを行うことができます。このため、JavaScript は「アマチュアには完全に適しており、プロのプログラマには適していない」という評判が与えられました。これは明らかに間違いです

オブジェクト指向

オブジェクト指向

JavaScript はオブジェクト指向ですか? JavaScript には、データを含めることができるオブジェクトと、そのデータに作用するメソッドがあります。オブジェクトにはクラスはありませんが、クラスの機能を含むコンストラクターはあります。クラス変数とメソッドのコンテナ。クラス指向の継承はありませんが、プロトタイプ指向の継承はあります。 JavaScript はオブジェクト指向ですか?これにはオブジェクトがあり、そのオブジェクトには
データとそのデータを操作するためのメソッドを含めることができます。また、オブジェクトには他のオブジェクト

を含めることもできます。クラスはありませんが、クラス変数やメソッドの宣言など、クラスの処理を行うコンストラクターがあります。クラス指向の継承はありませんが、プロトタイプ指向の継承はあります。

オブジェクト システムを構築する 2 つの主な方法は、継承 (is-a) と集約 (has-a) によるものですが、JavaScript はその両方を実行しますが、その動的な性質により集約に優れています。 オブジェクト システムを構築する 2 つの主な方法は、継承 (is-a) と集約 (has

-a) です。 JavaScript には両方の機能がありますが、その動的な性質により、集計よりも


優れた実装が可能になります。

JavaScript は情報の隠蔽を提供しないため、真のオブジェクト指向ではないと主張する人もいます。つまり、オブジェクトはプライベート変数やプライベート メソッドを持つことができず、すべてのメンバーがパブリックです。 JavaScript が真のオブジェクト指向ではないといういくつかの議論は、JavaScript が情報の隠蔽を提供しないという事実に基づいています。

つまり、JavaScript オブジェクトにはプライベート変数


やプライベート メソッドがなく、そのメンバーはすべてパブリックです。

しかし、JavaScript オブジェクトはプライベート変数とプライベート メソッドを持つことができることがわかりました (方法については、ここをクリックしてください。) もちろん、JavaScript は世界で最も誤解されているプログラミング言語であるため、これを理解している人はほとんどいません。

しかし実際には、JavaScript オブジェクトにはプライベート変数とプライベート メソッドを持つことができます (これを行う方法については、ここをクリックしてください)。もちろん、このことを知っている人がほとんどいないのは、JavaScript が世界で最も誤解されている言語だからです。


JavaScript は継承を提供しないため、真のオブジェクト指向ではないと主張する人もいます。しかし、JavaScript は古典的な継承だけでなく、他のコードの再利用パターンもサポートしていることが判明しました。

JavaScript が真のオブジェクト指向ではないというもう 1 つの議論は、JavaScript が継承を提供しないことです。しかし実際には、JavaScript は従来の継承をサポートしているだけでなく、他のコードの再利用パターンもサポートしています。

この記事はとても良いと思うので、転載して皆さんにシェアします。

英語アドレス:


http://www.crockford.com/javascript/javascript.html

中国語翻訳アドレス:

http://blog.csdn.net/uoyevoli/archive/2006/05/19/744915.aspx

翻訳者: Yuan Xiaohui

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。