JavaScript能做什么,该做什么?

关注者
416
被浏览
35643

15 个回答

我在用 nodejs 做字体……
想象力绝对不要被限制住。
转自 PuYart 的 segmentfault:JavaScript 就要统治世界了?

" JavaScript 可以……"
"嘛,不就是操作一下 DOM,可以让元素飞来飞去吗"
"JavaScript 是……"
"不就是用 jQuery 让网页动起来,顶多就是再用用 Ajax 和后端进行一下数据交换吗"
"JavaScript 是一门……"
"最讨厌和鄙视这种弱类型不需要编译的脚本语言了,你说 OOP? 扯淡的吧,JS 有对象吗"
"……"


  1. Web 前端
    很早以前各大公司对于 Web 标准的恶战让 JS 的环境异常恶劣,加之语言其本身的不成熟让其功能仅限于一些简单的前端交互。Ajax 技术的出现让前端可以在不刷新页面的情况下和后端进行数据交换,jQuery/zepto 等库的盛行让 JS 变得异常简单,Bootstrap/Amaze UI 等 UI 框架更是让前端的成本无限降低,RequireJS/SeaJs 让 JavaScript 也可以进行依赖管理,MVVM(Model-View-ViewModel 的出现让前后端的分离做到了极致,JavaScript 在前端领域前景明朗。


    // jQuery 进行 Ajax 请求
    $.ajax({
     async: true,
     type: 'POST',
     url: "api.php/CustomerLogin/login",
     data: {
       username: 'PuYart',
       password: 'jianshu', 
       uuid: 'web_jianshu'
     }, 
     success: function (data) {
         // 登录成功
     }
    });
    

    阮一峰(微博/博客)如是说:

  • 后端之旅
    2009年5月,Ryan Dah 发布了 Node 的最初版本。Node 是一个基于 Chrome JavaScript 运行时建立的平台,它对 Google V8 引擎进行了封装,使 JavaScript 第一次走出前端运行在了服务器上。这对 JavaScript 来说是一种质的突破,这使得 Web 编程可以只用一门语言便可完成。It's Amazing! Web 的大一统时代仿佛就要来了。同时 Node 也诞生了 npm,从此 JavaScript 也有了强大的包管理机制。

    • 2009年2月,Ryan Dahl 在博客上宣布准备基于 V8 创建一个轻量级的 Web 服务器并提供一套库。
    • 2009年5月,Ryan Dahl 在 GitHub 上发布了最初版本的部分 Node.js 包,随后几个月里,有人开始使用 Node.js 开发应用。
    • 2009年11月和2010年4月,两届 JSConf 大会都安排了 Node.js 的讲座。
    • 2010年年底,Node.js 获得云计算服务商 Joyent 资助,创始人 Ryan Dahl 加入 Joyent 全职负责 Node.js 的发展。
    • 2011年7月,Node.js 在微软的支持下发布 Windows 版本
    // 使用 Express 的 Hello world
    var express = require('express');
    var app = express();
    
    app.get('/', function (req, res) {
     res.send('Hello World!');
    });
    
    var server = app.listen(3000, function () {
     var host = server.address().address;
     var port = server.address().port;
    
     console.log('Example app listening at http://%s:%s', host, port);
    });
    
  • Hybrid App
    传统上 JavaScript 只能在浏览器中运行,Node 的出现让 JavaScript 运行在了服务端,然而脱离浏览器 JavaScript 还是不能跨平台运行。人们总是希望用一种方式去做所有的事情,于是聪明的工程师们就发明了 Hybrid App 这种形式,让 JavaScript 在一定意义上运行在了移动设备上。然而当前 Hybrid App 虽然让 JavaScript 也可以写出 JAVA/Objective-C 才能实现的 APP,但是这种方式仍然没有抛弃浏览器运行环境,对 WebView 有很强的依赖性,性能和原生应用还有很大差距。


  • 桌面应用
    至此 JavaScript 除了可以被浏览器解析,也可以作为后端语言使用,还可以用来构建移动端 APP。仿佛已经够强大了吧,然而这还不够,JavaScript 还可以用来构建桌面应用!
    Node-webkit
    Node-webkit 是一个 Web 应用程序运行时环境,它可以让你以 Web 的方式来写桌面应用程序,你可以用任何流行的 Web 技术来编写一个跨平台(Windows,Linux,MacOS)的桌面程序,并且性能和交互也是良好的,Teambition 桌面客户端便是使用 Node-webkit 编写的。目前在GitHub 上有 24463 Star。
    heX
    heX 是有道公司开发的采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案,意在解决传统桌面应用开发中繁琐的 UI 和交互开发工作,使其变的简单而高效。特别适合重 UI,重交互的桌面应用软件。新版有道词典 beta 版的首页便是使用 heX 开发完成的。

  • 神作 React
    React
    React(React.js) 是由 FaceBook 开发和维护的前端框架,目前在 GitHub 得到了 27900+ star。它摒弃了 MVC/MVVM 的模式,仅仅是做 UI,开创性地采用了 Virtual DOM(虚拟 DOM)避免了 DOM 操作消耗性能的问题,将 UI 拆分成不同的可组合、可复用、可维护的组件,组件和组件之间耦合度极低,开发效率大幅度增加。在前端 UI 组件化的趋势下,这很值得去尝试。instagram.com 全站都采用 React 进行开发。

     // 简单的官方示例
     var HelloMessage = React.createClass({
         render: function() {
             return <div>Hello {this.props.name}</div>;
         }
     });
    
     React.render(<HelloMessage name="John" />, mountNode);
    

    React Native
    React Native 既拥有 Native 的用户体验,又保留 React 的开发效率。开源不到1周 GitHub Star 破万,这简直是逆天的成绩啊!上线之初仅支持 iOS,React 也在9月14号对 Android 提供了支持服务,这几天意味着你可以使用同一套逻辑和架构、同一门语言实现 Web、iOS、Android 的开发。由于各大平台 API 和交互逻辑的不同,React Native 的理念是 “Learn once, write anywhere”,而不是曾经跨平台流行的 “Write once, run anywhere” 。实际上 React Native 和 React 有很大的差别,但是逻辑和架构还是保持一致的。React Native 和 Hybrid 最大的区别是前者摒弃了饱受性能诟病的 WebView,通过 HTML 标签和移动平台的组件进行映射,仿佛是将 JS “编译”成了原生语言一样,性能和交互体验会比 Hybrid 好上不少。目前在 GitHub 上有 18551 Star。

    // 简单的官方示例
    // iOS
    var React = require('react-native');
    var { TabBarIOS, NavigatorIOS } = React;
    var App = React.createClass({ 
      render: function() { 
         return ( 
           <TabBarIOS> 
             <TabBarIOS.Item title="React Native" selected={true}>
             <NavigatorIOS initialRoute={{ title: 'React Native' }} />
           </TabBarIOS.Item> </TabBarIOS>
         ); 
       },
    });
    
    // Android
    var React = require('react-native');
    var { DrawerLayoutAndroid, ProgressBarAndroid } = React;
    var App = React.createClass({
       render: function() {
         return (
           <DrawerLayoutAndroid
             renderNavigationView={() => <Text>React Native</Text>}>        
             <ProgressBarAndroid />
           </DrawerLayoutAndroid>
         );
       },
    });
    
  • 游戏
    世界上最流行的 2D 游戏引擎之一 Cocos2d 和最流行的 3D 游戏引擎之一 Unity3D 均支持 JS 开发游戏。
    Cocos2d-js
    Cocos2d-JS 是 Cocos2d-x 的 JavaScript 版本,融合了 Cocos2d-html5 和Cocos2d-x JavaScript Bindings。它支持 Cocos2d-x 的所有核心特性并提供更简单易用的 JavaScript 风格 API,并且天然支持原生、浏览器跨平台应用。
    在3.0版中,Cocos2d-JS 完成了不同平台工作流的彻底整合,为不同平台提供了统一的开发体验。无论开发 Web 应用还是原生应用,都可以便捷地采用 Cocos2d-JS 实现“一次开发,全平台运行”。采用 Cocos2d-JS 开发的同一套 JavaScript 游戏代码,可以同时运行在 Mac OS X, Windows, iOS, Android等原生平台、以及所有现代浏览器上,这将使得我们的开发者轻松覆盖几乎所有发行渠道,带来前所未有的机遇。另一方面,若开发者只想开发一款 Web 轻度休闲游戏,Cocos2d-JS 也专门为此类游戏定制了 Lite Version,直接将 Cocos2d-JS Lite Version 集成到页面中即可使用。


    Cocos2d-JS v3.0框架


    Unity3D
    Unity3D 是一个跨平台的 3D 游戏引擎,与 Cocos2d 最大的区别在于前者主要面对 2D 游戏开发者,后者主要进行大型 3D 游戏的开发。