Google Dart抗衡JavaScript的十大亮点

简介:

导读:Google是家充满创新力的公司。他们不喜欢Javascript了,于是自己推出了Dart。不负众望,Dart在今年的编程语言排行榜中成了一匹黑马,一经发布便窜到了排行榜107位,次月居然到了63,速度惊人。

  根据原文编译的内容如下:

  Dart是Google推出的新的结构化Web编程语言。我对它一见钟情。有人对我说,你需要深度剖析JavaScript,否则你无权评论它的优缺点。坦诚的说,我算不上一位JavaScript Ninja,但我坚信一种语言应该简单易学,容易理解,语言结构方面尽量合理。

  一直以来,我都在实践中解决JavaScript的不足之处,我也承认JavaScript有很多不错的功能。但我不得不说,每天与它工作时我得非常非常小心。这一点很是糟糕,编程语言应该得到程序员的友好支持,而非相反。

  下面是JavaScript的不足之处,这也是迫使我转投Dart的原因。

  1. Dart uses only one falsify (Dart只使用一种否定条件)

  看到这个标题,会容易想到false, null, undefined, “”, 0, NaN 作为否定条件,你可以这样写:

var a = null;

  if(!a) {

  // do

  }

 在Dart只有唯一的false,可以写成这样:

 var a = null;

  if(a != null) {

  // do

  }


虽然可以使用情形6中的否定条件,前提是你要好好了解它们。

  2. Dart can work with types, If you want it(只要你想,Dart可以使用类型)

  JavaScript开发者常说types(类型)会抹杀了灵活性,或许这是真的,但是太多的灵活性会毁掉你的软件。另一方面,Dart可以很好的用types编程。

  3. You need a framework to work proper with DOM (你需要一个框架来解析DOM)

  在JavaScript中,你可以这样写:

getElementsById()

  getElementsByTagName()

  getElementsByName()

  getElementsByClassName()

  querySelector()

  querySelectorAll()

  document.links

  document.images

  document.forms

  document.scripts

  formElement.elements

  selectElement.options


这样不是很完美吗?使用jQuery来帮助我们。也并不是非要从选择框架来解析DOM。

  但Dart有了jQuery,只需以下2点:

 elem.query('#foo');

  elem.queryAll('.foo');

  4. Classes and Interfaces (类和接口)

  当Java开发人员使用JavaScript时,他们经常尝试着去编写代码,就像编写Java代码一样。有构造函数和类等元素。当然,这不是JavaScript的编程方式。它是基于以一切项目为标准。

  5. Inheritance(继承)

  Rauschmayer博士发表过一篇优秀的博文,他在博客中解释了为什么JavaScript inheritance很简单。但值得注意的是:他的建议不是JavaScript inheritance的唯一途径。Frameworks Prototype和jQuery创建了“扩展”方法。Rauschmayer博士使用__proto__,你可以使用prototype keyword ,当然,你也可以实现自己的扩展机制,简单复制每个属性。用Google搜索“javascript object extends”弹出的所有结果,有各种各样的方法,只为实现一个目标:扩展。

  Dart里有classes概念和“extends”关键词,非常简单。

  6. Global namespace (全域名空间)

  在JavaScript中你需要注意,不要搅乱全域名空间,老实说,这个很容易。如果错过了“this”或“var”变量,导致每个脚本都能访问它,这是非常可怕的,尽量别搞乱这些。这里要感谢Stoyan Stefanovs Book JavaScript Patterns使我认识到保持域名空间清洁的重要性。现在我感觉好多了,同时也易于控制。

  在Dart里扩展了“library”范围,意味着你有一个关键的“library”仅对外开放的部分。此外,每一个Dart脚本能独立执行,有一个活动区域。使用Dart你还应该思考visibility和libraries,这将成为你学会Dart的一种简易方式,,而不需要从其他书籍中获知。

  7. Dart knows concurrency (Dart支持并行)

  使用JavaScript不是真的并行,即使是但也需要你做出一个“jQuery异步需求”,你依然在“thread”中运行,你可以从V8中获得更多,你也可以通过HTML5和webworkers来解决。

  Dart支持Isolates,这有点像Erlang,它们之间可以相互沟通,如果其中一个失败了,另一个Isolate可以再次启动。当然这使Dart成为一个非常不错的服务端编程。

  8. JavaScript doesn’t know foreach (JavaScript不支持foreach)

  你可以扩展Object或者Array.prototype,或者也可以采用以下数组:

for (var i = 0; i < elements.length; i++) {

  // do something

  }


你还可以设置objects:

for (key in elements) {

  alert(elements[key]);

  }

       而不幸的是Douglas Crockford(在JavaScript界一位很了不起的人物),不建议使用此语句。原因:你的结果不是排序的,我可能会从prototype chain或者function names命名。当然你也可以过滤hasOwnProperty。最后,你应该看下框架文件,如果他们提供了相应内容。

  而在Dart中:

 for (element in elements) {

  // do something

  }


就是这么简单!

  9. Weirdness intializing arrays(数组初始化)

  看看这个代码:

  var a1 = new Array(1,2,3,4,5);

  var a2 = new Array(5);

  a1有5个元素的数组:[1,2,3,4,5]

  a2具有5个元素的数组:[undefined,undefined,undefined,undefined,undefined]

  而Dart就更加简洁:

  List a1 = [1,2,3,4,5];

  List a2 = new List(5);

  同样的,a1包含5个不同的元素数组,a2包含5个元素数组。此外,你还可以获得一个不错的功能“removeRange”可支持排序。

  10. undefined和null

  当使用JavaScript时你需要学习很多,该类型值:undefined。它可被重写。你可以通过各种方案获得,例如:假如你调用返回,但不返回任何数值,在链接的页面上,你可以看到如何处理一个可能被覆盖未定义的值。Null可以通过undefined在多种方案下调用。

  而Dart只需要一个null。

  结束语:

  当然,JavaScript也有很多好的部分,比如一些不错的模式,但目前来说,使用Dart也能实现这些功能。我认为Dart更优雅,更容易阅读。或许,JavaScript的一些铁杆开发者不这么认为,没关系,只要喜欢你可以继续使用JavaScript。但我想,Dart或许会在另一面成为主流。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/760491,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
JavaScript 前端开发
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
45 1
|
Dart JavaScript 前端开发
JavaScript & React & Ant Design & Flutter & Dart 基础学习笔记 Tree Form 组件通信 封装等
JavaScript & React & Ant Design & Flutter & Dart 基础学习笔记 Tree Form 组件通信 封装等
|
2月前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
50 4
|
4月前
|
JSON Dart 前端开发
分享15 个 JavaScript 代码示例及其 Dart 对应代码。
本文对比了React/React Native中的JavaScript语法与Flutter中的Dart语法,帮助开发者快速上手Flutter。内容涵盖JSON处理、数组操作、类型转换、条件判断等常见功能,如`JSON.stringify`与`JsonEncoder().convert`,`array.push`与`list.add`,`parseInt`与`int.parse`等,并提供了15个JavaScript与Dart代码示例对照。这对于从JavaScript转向Dart的开发者尤其有用。
28 0
|
5月前
|
JSON Dart 前端开发
JavaScript代码及其 Dart 对应代码
15 个 JavaScript 代码示例及其 Dart 对应代码
43 3
|
5月前
|
JSON Dart 前端开发
JavaScript 代码示例及 Dart 对应代码
JavaScript 代码示例及 Dart 对应代码
50 5
|
6月前
|
JSON Dart 前端开发
JavaScript 代码示例及其 Dart 对应代码
从React/React Native转向Flutter开发时,开发者常需查找Dart对等的JS语法。这里列举了15个转换示例,涉及JSON转换、数组操作、条件检查及转换方法。例如,JS的`JSON.stringify`在Dart中是`JsonEncoder().convert`,`array.push`对应`list.add`,`array.findIndex`在Dart中是`list.indexWhere`。Dart还提供了如`list.any`和`list.every`等类似JS的数组方法。虽然语法有别,但核心功能相似。
46 5
|
7月前
|
JavaScript 测试技术
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
|
7月前
|
设计模式 前端开发 JavaScript
AngularJS是一款由Google收购的JavaScript结构框架
【5月更文挑战第2天】AngularJS是Google收购的JavaScript框架,用于构建动态Web应用,基于MVC模式,强调模块化和双向数据绑定。它简化了视图与模型的同步,通过语义化标签和依赖注入提升开发效率。适用于复杂单页面应用(SPA),但不适合DOM操作密集型或性能要求极高的场景。
73 0
|
7月前
|
JavaScript 前端开发 Java
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 和 Ext JS 都是 JavaScript 框架,用于开发 Web 应用程序。它们分别提供了不同的功能和特性,以帮助开发者更高效地构建和维护 Web 应用程序。
55 2