首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX  ›  程序员

网页开发 为何非 JavaScript 不可

  •  
  •   KunMinX · 46 天前 · 6435 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。

    查了一上午,发现 多数搜索结果都只谈 “是什么、怎么用”,却对 “为什么” 绝口不提

    我知道这门语言既然存活下来,其中必有商业或非商业的组织出于利益考虑在维护和支持。

    但我仍然想从技术角度来搞清楚,为什么是它?它的设计目标是什么?它和其他语言相比,到底有什么不可替代的优势?

    第 1 条附言  ·  45 天前

    非常感谢 v 友分享的 阮一峰 博客链接,其中关于 js 背景由来原型链继承 的文章很有意思。

    截至目前,我的理解是,js 是其作者 兼顾本人喜好 和 公司决策的产物。他本人喜欢函数式编程,而公司看好 java,并且初衷是 为 非专业人士 设计这样一款 面向网页开发 的 脚本语言

    因此除了借鉴 c 语言的语法、java 的数据类型和内存管理,再往下的语言特性 就得斟酌再三,不要让它太重(像 java 一样做什么都要先 new 几个对象),又要确保必要功能的存在,因而借鉴了 scheme 的函数式编程 和 self 的基于原型的面向对象编程。

    也正因为它足够轻量、灵活,所以一经面市,就受到广泛的接受,又由于受众广,而别无选择地成为 web 开发的事实标准。

    综上,它的特点是 轻量、灵活,使用感受和 python 有一点点类似,但专为动态网页而生,是在时下的浏览器多是支持 js 的背景下、解决网页开发时的不可替代。(后续浏览器支持 wasm 的话,js 就不再那么不可替代了)

    第 2 条附言  ·  45 天前
    笔误,做什么都要先 new 几个对象 -> 随随便便做点什么 都可能需要先建几个类,而不能点到为止地函数走起。
    79 回复  |  直到 2020-01-10 11:17:29 +08:00
    lovedebug
        1
    lovedebug   46 天前
    第一个广泛流行浏览器用了 JavaScript
    商业倒逼标准
    randyo
        2
    randyo   46 天前 via Android
    因为浏览器支持
    codehz
        3
    codehz   46 天前 via Android
    优势就是所有浏览器都支持啊,IE 是支持 VBS,也可以用插件,但是 IE 基本已经死了(
    helionzzz
        4
    helionzzz   46 天前   ❤️ 18
    这种从结果推原因没什么意义的。就像你问,为什么是马云创立阿里巴巴,诚然你可以分析他的性格他的家庭等等等等,但是可以马上有人说如果不是马云也可以是张云李云。但事实就是没有张云李云做成了,只有马云做成了。笼统的说一个总结就是个人特质加时代推动造就了他。这个结论放在 JS 上我觉得也没有什么不妥
    Biscuits
        5
    Biscuits   46 天前
    @helionzzz 我和老哥的想法一样, 但既然小朋友要一个答案,还是给他一个吧。有时候就是这样模糊。

    答案: https://en.wikipedia.org/wiki/JavaScript
    maichael
        6
    maichael   46 天前
    有什么不可替代的优势,没有,至少成为所有浏览器标准的时候没有。

    有很多事情的发生都是因为偶然。我敢说 Javascript 的崛起很多都是因为偶然。
    zappos
        7
    zappos   46 天前 via Android
    js 在 web 里的作用就是个 ir,由于人类不直接写和读,方便编译就好了。
    manami
        8
    manami   46 天前   ❤️ 1
    dart 的使命就是替代 js
    coolooks
        9
    coolooks   46 天前
    这种问题就跟“人活着,为什么非要吃饭”一样,有什么意义
    alphatoad
        10
    alphatoad   46 天前 via iPhone   ❤️ 2
    不啊,你还可以用 web assembly (逃
    augustheart
        11
    augustheart   46 天前
    因为现在浏览器大行其道,所以 js 就流行了。
    zsdroid
        12
    zsdroid   46 天前   ❤️ 1
    因为 java。
    据说 js 刚出来时,java 盛行,为了蹭热度于是命名为 JavaScript。
    因为风口的风比较大,所以猪飞起来了啊。
    这只能用时势造英雄来解释。
    KunMinX
        13
    KunMinX   46 天前
    @maichael 不排除 js 的存在和地位的确立 真的只是独立事件。

    我主要想从技术角度搞明白,这门语言,相比其他语言,在网页开发中,有什么不可替代的特点,哪怕特点只有一个,那也行啊,

    比如 它存在 “原型链和继承” 的概念,python 等语言就没有。这个概念有没有什么惊人的特点、对网页开发来说 …
    Hoshinokozo
        14
    Hoshinokozo   46 天前   ❤️ 2
    因为它就是为 web 开发而生的,JS 从最初的设计阶段就被定义为一种适合浏览器使用的脚本语言,在此之前也有用 JAVA 写脚本的,但是 JAVA 太罗嗦了,所以 netscape 才会想要设计一款专门用于 web 开发的脚本语言。

    而 JS 的流行是因为早期 netscape 的统治地位,以及后来 IE 的衰落,至于为什么不是其他语言,因为早期在浏览器中支持多种语言是成本比较高的,而且那时候的 web 能力有限,根本用不着那些较重的语言,所以 JS 相当于被钦定了。

    而现在,WASM 已经进入 W3C 标准了,所以你只要愿意,你可以用 c++或者 RUST 写 WEB,但是 JS 的生态摆在那儿,如同 C#明明比 JAVA 优雅的多,但是国内依旧是 JAVA 的天下,JS 一日不死,尔等终究是太子 233333
    renmu123
        15
    renmu123   46 天前   ❤️ 1
    可以看这一篇文章: https://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html

    当时 js 被很粗糙的设计出来了,连函数的命名也是乱七八糟,一会儿驼峰一会儿下划线,java 和 python 都抄了一点
    zappos
        16
    zappos   46 天前 via Android
    @renmu123 ???

    一等函数,作用域链和扁平作用域抄的 scheme,这是作者亲口承认的。

    虽然 python 也抄的是某个 lisp 方言。
    Hellert
        17
    Hellert   46 天前
    用过 VBScript 的都不会有此疑问
    love
        18
    love   46 天前
    @renmu123 js 哪有下划线??
    murmur
        19
    murmur   46 天前
    @manami 不是说 webasm 么怎么开始吹 dart 了
    GM
        20
    GM   46 天前
    这个叫做 de-facto,事实上的标准。
    毫无道理可言,人家就是由于天时地利等方面的原因,成为了事实上的标准,其他人只能跟随。
    lihongjie0209
        21
    lihongjie0209   46 天前
    因为 runtime 目前只支持 js, 要么 runtime 支持别的语言, 要么别的语言编译到 js
    bzj
        22
    bzj   46 天前
    你怎么不问 网页开发 为何非 HTML 不可
    janxin
        23
    janxin   46 天前
    因为事实上是除了 JS 其他在浏览器上都是渣渣,要么不能直接跑,要么就是有这样那样的限制。

    至于技术方面的问题,这都不是技术方面的问题...
    darmau
        24
    darmau   46 天前
    @KunMinX 香港至今还是右舵驾驶,靠右有什么不可替代的优点吗?没有。但是改成左舵需要很高的成本
    Sunyanzi
        25
    Sunyanzi   46 天前   ❤️ 5
    既然看到了还是提一嘴好了 ...

    作为一个有二十余年网页编写经验 ... 亲历了 Netscape Navigator 由盛转衰 ... 见证了 UA 变迁的人 ...

    我觉得一言以蔽之 ... 这事情不是说 JavaScript 有多厉害 ... 实在是因为 VBScript 太不给力了 ...

    VBScript 起点不可说不高 ... IE 捆绑 Windows 95 的年代 ... VBScript 一度拥有绝对统制地位 ...

    然后微软自己把一手好牌打了个稀烂 ... 越来越多的人对 VBScript 失望 ... 这些人迫切需要一个替代品 ...

    而能够成为替代品的 ... 当时只有唯一一个选择 ... 叫 JavaScript ... 别无他选 ...

    初代的 JavaScript 也垃圾也乱 ... 但好在开发者一直在听需求在更新 ... 大家忍啊忍啊的就到今天了 ...

    这事情扩展开可以说得很大 ... 我就不细说了 ... 总之有些事情一旦被时代所选择 ... 就没那么容易改变了 ...
    mxT52CRuqR6o5
        26
    mxT52CRuqR6o5   45 天前 via Android
    像现在支持一种 js 语言已经很累了,再完善的支持另外一种语言不现实
    如果是开发的话,我知道 dart 和 kotlin 都能编译到 js
    fox1955
        27
    fox1955   45 天前
    不是名门出身, 但是 es6 以后, js 正走向了完美.
    shintendo
        28
    shintendo   45 天前
    这个问题可以看 DC 的一个关于早期浏览器、js 发展历史的一个讲座,讲得很有趣

    &list=PL7664379246A246CB
    lolizeppelin
        29
    lolizeppelin   45 天前   ❤️ 2
    @KunMinX

    做技术做傻了非要从技术上找原因当然找不到,本来就不是技术原因啊
    shintendo
        30
    shintendo   45 天前
    @KunMinX 跟原型继承没多大关系,主要是事件驱动的异步编程模型
    opengps
        31
    opengps   45 天前
    你可以不写 javascript 也做成网页,纯服务器输出静态 html 也可以是个不错的网站。但是想在客户端二次运行点啥,目前也就得借用 javascript 来实现了
    longjiahui
        32
    longjiahui   45 天前
    只有我特别喜欢 js 的吗 0..0
    longjiahui
        33
    longjiahui   45 天前
    @longjiahui 没错 只有你一个人
    leekafai
        34
    leekafai   45 天前
    不是时代选择了 JS,是 JS 造就了时代
    DOLLOR
        35
    DOLLOR   45 天前   ❤️ 1
    dart 在谷歌手里,vbscript 在微软手里,flash 在奥多比手里,唯有 js 比其他的语言更中立、开放,大家都放心用。
    wszgrcy
        36
    wszgrcy   45 天前 via Android   ❤️ 3
    @longjiahui 你没换号就评论了
    oyjc
        37
    oyjc   45 天前
    凡是能被 WebAssembly 实现的,终将会编译到 WebAssembly,不限于浏览器,WASI 了解一下。
    gzf6
        38
    gzf6   45 天前
    大公司博弈的结果
    bojackhorseman
        39
    bojackhorseman   45 天前
    只是因为它叫 JavaScript,就算不是 js 也可能是其他语言,然后另一个时间线上的也会有人问为什么是它。
    bojackhorseman
        40
    bojackhorseman   45 天前
    @longjiahui #33 我杠我自己
    yxcoder
        41
    yxcoder   45 天前
    偶然性和必然性的结果,浏览器需要一门语言,这是必然性,在同时代的竞争下,js 表现最好,这是偶然性
    cmdOptionKana
        42
    cmdOptionKana   45 天前
    这个还真是历史原因。

    微软试过 VBscript,谷歌试过 Dart,另外当年 Java 也是直接在浏览器内运行的(还一度非常流行)。

    还有 flash,曾经一度非常流行,背景音乐、小动画、广告 banner 都用 flash,甚至整个网页直接只提供 flash 版本(真的非常酷炫),这种网站还不少。

    微软又企图用 SilverLight 来取代 flash (但完全没搞起来)。

    但这些 JS 的竞争对手全部失败告终,反而 JS 越来越完善。

    JS 就是命好,本来出生的时候是 “早产儿”,有先天缺陷,但是后来却走运越活越好。
    lonelymarried
        43
    lonelymarried   45 天前
    不用 js 还能用什么
    ceet
        44
    ceet   45 天前
    人,为什么非要吃饭不可?
    fffang
        45
    fffang   45 天前
    难道不是 HTML?
    cmdOptionKana
        46
    cmdOptionKana   45 天前   ❤️ 1
    另外补充一个原因。

    再谷歌推出 V8 引擎(虽然貌似是收购来的,记不清了,不重要)之前,JS 虽然一直被广泛使用,却也一直危机四伏,很多公司企图推翻它,很多开发者 /用户也希望它被取代,因为以前 JS 运行效率很低,一旦用多了 JS 页面就非常卡!

    直到 V8 引擎(或同时代的其他引擎)推出,JS 的地位才开始稳固,特别是采用 V8 的 Node.js 攻占后端,才算迎来爆炸性发展。

    而在此背后,是 Google 一直不遗余力推动互联网的“开放性”,Google 一直在做反封闭、保持互联网开放的工作。当然,这是由于符合他家的经济利益,并非因为好心,我们间接受益。
    nutting
        48
    nutting   45 天前
    看你是说历史上还是现在,现在当然是历史原因了,别的用不了啊,浏览器要支持
    longjiahui
        49
    longjiahui   45 天前   ❤️ 1
    @bojackhorseman 立于不败之地的方法就是先杀了自己,让别人杀不了我
    crella
        50
    crella   45 天前 via Android
    能嵌入到其他程序的语言,除了 lua 还有啥?

    我觉得插件形式的始终不靠谱。
    sevenzhou1218
        51
    sevenzhou1218   45 天前   ❤️ 2
    就知道有鸟人说是为了蹭 java 的热度,2333
    crella
        52
    crella   45 天前 via Android
    还知道一个 visual basic for applications
    lk920724
        53
    lk920724   45 天前   ❤️ 1
    不错的问题,没看到比较满意的回答。

    我觉得可能和 火箭推进器的大小 有的相似的连锁反应。

    我只知道为什么叫 JavaScript 因为当时 Java 比较火( XSK.PNG )
    IGJacklove
        54
    IGJacklove   45 天前
    这你不用 JavaScript 写个网站不就明白了么。。。
    coloz
        55
    coloz   45 天前
    路径依赖和商业选择吧。
    老实说早期 js 本身很辣鸡,就是个不健全的语言,作为一个其他语言转前端的开发者,感觉 js 程序猿们津津乐道的各种奇技淫巧其实就是在解决因为语言辣鸡产生的各种问题。
    好的是,虽然 es6 开始变得健全了(有了 class ),ts 也很好使,但 js 的更新给人感觉就是在修修补补。。。
    someonedeng
        56
    someonedeng   45 天前
    编程语言在自我奋斗的同时也要顺应历史进程 [] . []
    agdhole
        57
    agdhole   45 天前
    历史的进程
    KuroNekoFan
        58
    KuroNekoFan   45 天前 via iPhone
    不是因为浏览器只有 js 的 runtime 和 dom 接口?
    BasIrs
        59
    BasIrs   45 天前
    不会用 JS,只会用 div,开局一个 div,布局全靠 div
    finaldusk
        60
    finaldusk   45 天前
    Blazor
    waltcow
        61
    waltcow   45 天前
    编程语言在自我奋斗的同时当然也要考虑历史的进程的
    xinghuan
        62
    xinghuan   45 天前
    遇到一个全网用 JavaScript 的商业网站,垃圾得要死,各种问题
    djyde
        63
    djyde   45 天前
    历史的话,维基百科说得清清楚楚啊: https://www.wikiwand.com/zh/JavaScript
    djyde
        64
    djyde   45 天前
    1993 年,伊利諾大學厄巴納-香檳分校的國家超級電腦應用中心( NCSA )發表了 NCSA Mosaic,這是最早流行的圖形介面網頁瀏覽器,它在全球資訊網的普及上發揮了重要作用。1994 年,一家名為 Mosaic Communications 的公司在加州山景城成立了,並雇用了許多原來的 NCSA Mosaic 開發者用來開發 Mosaic Netscape,該公司的目標是取代 NCSA Mosaic 成為世界第一的網頁瀏覽器。第一個版本的網頁瀏覽器 Mosaic Netscape 0.9 於 1994 年底發布。在四個月內,已經佔據了四分之三的瀏覽器市場,並成為 1990 年代網際網路的主要瀏覽器。為避免 NCSA 的商標所有權問題,該瀏覽器於同年更名為 Netscape Navigator,該公司命名為 Netscape Communications。網景預見到網路需要變得更動態。公司的創始人馬克·安德森認為 HTML 需要一種膠水語言,讓網頁設計師和兼職程式設計師可以很容易地使用它來組裝圖片和外掛程式之類的元件,且程式碼可以直接編寫在網頁標記中。

    1995 年,網景招募了布兰登·艾克,目標是把 Scheme 語言嵌入到 Netscape Navigator 瀏覽器當中[8]。但更早之前,網景已經跟昇阳合作在 Netscape Navigator 中支援 Java,這時網景內部產生激烈的爭論[9]。後來網景決定發明一種與 Java 搭配使用的輔助腳本語言並且語法上有些類似[10],這個決策導致排除了採用現有的語言,例如 Perl、Python、Tcl 或 Scheme。為了在其他競爭提案中捍衛 JavaScript 這個想法,公司需要有一個可以運作的原型。艾克在 1995 年 5 月僅花了十天時間就把原型設計出來了。

    最初命名為 Mocha,1995 年 9 月在 Netscape Navigator 2.0 的 Beta 版中改名為 LiveScript,同年 12 月,Netscape Navigator 2.0 Beta 3 中部署時被重新命名為 JavaScript[1][11],當時网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上 Java 这个编程语言“热词”,因此将其临时改名为 JavaScript,日后这成为大众对这门语言有诸多误解的原因之一[12]。
    huiyadanli
        65
    huiyadanli   45 天前
    各位别忘记后来的 Flash,一直企图推翻 js。。没想到中途蹦出个 HTML5 标准。。。

    记得 09 年的时候很多文章都在唱衰 js
    supersonic13
        66
    supersonic13   45 天前
    因为 JS
    supersonic13
        67
    supersonic13   45 天前
    因为 JS 就是为了网页开发设计出来的。。。
    charlie21
        68
    charlie21   45 天前 via Android   ❤️ 1
    有的人说不清哪里好,可就是因为出现得早。
    TangMonk
        69
    TangMonk   45 天前
    这种问题毫无意义,就像求和符号为什么是 Σ,而不是其他,因为欧拉就想这么搞,你有啥办法。
    LokiSharp
        70
    LokiSharp   45 天前
    可以用 C# .net Core 啊
    ikaros
        71
    ikaros   45 天前
    现在可以用 wasm
    libook
        72
    libook   45 天前
    这是个特别宽泛的问题,不是由一个因素决定的,是由多个方面的因素决定的。

    维护者是谁?
    JavaScript 语言本身实际上是以引擎的形态存在的,而引擎是由各个厂商依照自己的具体商业或非商业的需求来研发的,统一参照的 ECMA-262 标准来设计的,ECMA-262 是 ECMA 组织的 TC39 委员会主导制定的,这个委员会的成员中一部分是引擎厂商的技术人员,由于 JavaScript 主要用于 Web 技术领域,所以其中还有一些参与制定 Web 标准的人;此外 ES-262 接受非 TC39 成员为制定规范提出草案,这些人也算是 JavaScript 的维护者。
    所有维护者中,有些是直接利益关系者,有些是间接利益关系者,有些是公益人士,也有些是独立爱好者。整体社区算是非常开放和活跃的。

    为什么是它?
    最一开始 Web 技术出现的时候,JavaScript 就是为了 Web 而设计的,并在当时因为种种原因在多种语言中脱颖而出,成为最广泛使用的 Web 开放语言,感兴趣可以了解一下这段历史。
    为什么现在依然是它,这是由市场决定的。绝大多数用户使用的浏览器都以 JavaScript 作为页面的主要开发语言,绝大多数的 Web 开发者也都用 JavaScript (或最终编译成 JavaScript 的其他语言)作为页面开发的主要语言,浏览器、Web 相关技术沉淀和标准都是围绕 JavaScript 的;那么现在有一个新的厂商想做一款新的浏览器,如果不用 JavaScript 作为主要语言的话,就会难以拉拢现有的 Web 开发者加入,也会因为没有专门的技术沉淀以及标准的支持而难以发展。

    它的设计目标是什么?
    最初是为 Web 设计的,所以它的设计目标要以当时的 Web 技术的行业状况来看。

    > 网景预见到网络需要变得更动态。公司的创始人马克·安德森认为 HTML 需要一种胶水语言,让网页设计师和兼职程序员可以很容易地使用它来组装图片和插件之类的组件,且代码可以直接编写在网页标记中。
    > 1995 年,网景招募了布兰登·艾克,目标是把 Scheme 语言嵌入到 Netscape Navigator 浏览器当中。但更早之前,网景已经跟昇阳合作在 Netscape Navigator 中支持 Java,这时网景内部产生激烈的争论。后来网景决定发明一种与 Java 搭配使用的辅助脚本语言并且语法上有些类似,这个决策导致排除了采用现有的语言,例如 Perl、Python、Tcl 或 Scheme。

    ——维基百科《 JavaScript 》

    提炼一下就是:
    1. 要能实现较复杂的逻辑来拼接 HTML。
    2. 能在浏览器上和 HTML 配合使用。
    3. 需要被快速设计和实现出来(迫于网景内部争论,当时仅仅花了 10 天就被设计出来了)。
    4. 蹭 Java 的热度,有必要也可以借鉴 Java 的一些好的设计。
    5. 尽量贴近当时人们对编程语言的认知和习惯,同时不要像当时很多语言那么复杂,易学易用便于推广。

    它和其他语言相比,到底有什么不可替代的优势?
    没有什么语言是不可替代的,就看在应用场景上最看看重什么。我举个例子,现在有一些非网页技术也想使用 JavaScript,原因可能是因为 JavaScript 开发者数量众多,自己的技术便于推广,比如 Electron 技术可以用 JavaScript 来开发桌面软件,招 C\C++工程师肯定不如招 JavaScript 工程师容易,那么对于一些并不需要系统底层功能支持的桌面软件来说,用 JavaScript 性价比很高,特别是对于那些原本就有网站产品的公司(本来就有 JavaScript 开发资源)。
    ihciah
        73
    ihciah   45 天前 via iPad
    dart 可以翻译成 js,rust 和 go 可以 wasm 一把。(看起来最香的还是 rust ?
    duanxianze
        74
    duanxianze   45 天前
    这问题没有任何意义 不是 js 还会有 as bs 历史的偶然决定了现在的必然
    momocraft
        75
    momocraft   45 天前
    路径依赖
    jss
        76
    jss   45 天前
    谁说非 JavaScript 不可,TypeScript ?(:手动滑稽
    magicluna01
        77
    magicluna01   45 天前
    因为替换的成本太高了
    Phariel
        78
    Phariel   45 天前
    JavaScript 成为标准 有偶然也有必然 故事要从网景时代开始讲起。。。
    fqzz
        79
    fqzz   44 天前
    为什么安卓用 java/kotlin,为什么 iOS 用 oc/swift,为什么 unity 用 c#
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2959 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:48 · PVG 14:48 · LAX 22:48 · JFK 01:48
    ♥ Do have faith in what you're doing.