查了一上午,发现 多数搜索结果都只谈 “是什么、怎么用”,却对 “为什么” 绝口不提。
我知道这门语言既然存活下来,其中必有商业或非商业的组织出于利益考虑在维护和支持。
但我仍然想从技术角度来搞清楚,为什么是它?它的设计目标是什么?它和其他语言相比,到底有什么不可替代的优势?
非常感谢 v 友分享的 阮一峰 博客链接,其中关于 js 背景由来 和 原型链继承 的文章很有意思。
截至目前,我的理解是,js 是其作者 兼顾本人喜好 和 公司决策的产物。他本人喜欢函数式编程,而公司看好 java,并且初衷是 为 非专业人士 设计这样一款 面向网页开发 的 脚本语言,
因此除了借鉴 c 语言的语法、java 的数据类型和内存管理,再往下的语言特性 就得斟酌再三,不要让它太重(像 java 一样做什么都要先 new 几个对象),又要确保必要功能的存在,因而借鉴了 scheme 的函数式编程 和 self 的基于原型的面向对象编程。
也正因为它足够轻量、灵活,所以一经面市,就受到广泛的接受,又由于受众广,而别无选择地成为 web 开发的事实标准。
综上,它的特点是 轻量、灵活,使用感受和 python 有一点点类似,但专为动态网页而生,是在时下的浏览器多是支持 js 的背景下、解决网页开发时的不可替代。(后续浏览器支持 wasm 的话,js 就不再那么不可替代了)
1
lovedebug 2020-01-08 13:37:01 +08:00
第一个广泛流行浏览器用了 JavaScript
商业倒逼标准 |
2
randyo 2020-01-08 13:38:04 +08:00 via Android
因为浏览器支持
|
3
codehz 2020-01-08 13:40:29 +08:00 via Android
优势就是所有浏览器都支持啊,IE 是支持 VBS,也可以用插件,但是 IE 基本已经死了(
|
4
helionzzz 2020-01-08 13:42:57 +08:00 18
这种从结果推原因没什么意义的。就像你问,为什么是马云创立阿里巴巴,诚然你可以分析他的性格他的家庭等等等等,但是可以马上有人说如果不是马云也可以是张云李云。但事实就是没有张云李云做成了,只有马云做成了。笼统的说一个总结就是个人特质加时代推动造就了他。这个结论放在 JS 上我觉得也没有什么不妥
|
5
Biscuits 2020-01-08 13:48:33 +08:00
|
6
maichael 2020-01-08 13:50:59 +08:00
有什么不可替代的优势,没有,至少成为所有浏览器标准的时候没有。
有很多事情的发生都是因为偶然。我敢说 Javascript 的崛起很多都是因为偶然。 |
7
zappos 2020-01-08 13:52:51 +08:00 via Android
js 在 web 里的作用就是个 ir,由于人类不直接写和读,方便编译就好了。
|
8
manami 2020-01-08 13:55:30 +08:00 1
dart 的使命就是替代 js
|
9
coolooks 2020-01-08 13:57:33 +08:00
这种问题就跟“人活着,为什么非要吃饭”一样,有什么意义
|
10
alphatoad 2020-01-08 13:58:22 +08:00 via iPhone 2
不啊,你还可以用 web assembly (逃
|
11
augustheart 2020-01-08 14:00:04 +08:00
因为现在浏览器大行其道,所以 js 就流行了。
|
12
zsdroid 2020-01-08 14:00:43 +08:00 1
因为 java。
据说 js 刚出来时,java 盛行,为了蹭热度于是命名为 JavaScript。 因为风口的风比较大,所以猪飞起来了啊。 这只能用时势造英雄来解释。 |
13
KunMinX OP @maichael 不排除 js 的存在和地位的确立 真的只是独立事件。
我主要想从技术角度搞明白,这门语言,相比其他语言,在网页开发中,有什么不可替代的特点,哪怕特点只有一个,那也行啊, 比如 它存在 “原型链和继承” 的概念,python 等语言就没有。这个概念有没有什么惊人的特点、对网页开发来说 … |
14
Hoshinokozo 2020-01-08 14:15:31 +08:00 2
因为它就是为 web 开发而生的,JS 从最初的设计阶段就被定义为一种适合浏览器使用的脚本语言,在此之前也有用 JAVA 写脚本的,但是 JAVA 太罗嗦了,所以 netscape 才会想要设计一款专门用于 web 开发的脚本语言。
而 JS 的流行是因为早期 netscape 的统治地位,以及后来 IE 的衰落,至于为什么不是其他语言,因为早期在浏览器中支持多种语言是成本比较高的,而且那时候的 web 能力有限,根本用不着那些较重的语言,所以 JS 相当于被钦定了。 而现在,WASM 已经进入 W3C 标准了,所以你只要愿意,你可以用 c++或者 RUST 写 WEB,但是 JS 的生态摆在那儿,如同 C#明明比 JAVA 优雅的多,但是国内依旧是 JAVA 的天下,JS 一日不死,尔等终究是太子 233333 |
15
renmu123 2020-01-08 14:22:09 +08:00 1
可以看这一篇文章: https://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html
当时 js 被很粗糙的设计出来了,连函数的命名也是乱七八糟,一会儿驼峰一会儿下划线,java 和 python 都抄了一点 |
16
zappos 2020-01-08 14:28:00 +08:00 via Android
|
17
Hellert 2020-01-08 14:29:29 +08:00
用过 VBScript 的都不会有此疑问
|
20
GM 2020-01-08 14:37:24 +08:00
这个叫做 de-facto,事实上的标准。
毫无道理可言,人家就是由于天时地利等方面的原因,成为了事实上的标准,其他人只能跟随。 |
21
lihongjie0209 2020-01-08 14:38:20 +08:00
因为 runtime 目前只支持 js, 要么 runtime 支持别的语言, 要么别的语言编译到 js
|
22
bzj 2020-01-08 14:38:27 +08:00
你怎么不问 网页开发 为何非 HTML 不可
|
23
janxin 2020-01-08 14:39:54 +08:00
因为事实上是除了 JS 其他在浏览器上都是渣渣,要么不能直接跑,要么就是有这样那样的限制。
至于技术方面的问题,这都不是技术方面的问题... |
25
Sunyanzi 2020-01-08 14:45:34 +08:00 5
既然看到了还是提一嘴好了 ...
作为一个有二十余年网页编写经验 ... 亲历了 Netscape Navigator 由盛转衰 ... 见证了 UA 变迁的人 ... 我觉得一言以蔽之 ... 这事情不是说 JavaScript 有多厉害 ... 实在是因为 VBScript 太不给力了 ... VBScript 起点不可说不高 ... IE 捆绑 Windows 95 的年代 ... VBScript 一度拥有绝对统制地位 ... 然后微软自己把一手好牌打了个稀烂 ... 越来越多的人对 VBScript 失望 ... 这些人迫切需要一个替代品 ... 而能够成为替代品的 ... 当时只有唯一一个选择 ... 叫 JavaScript ... 别无他选 ... 初代的 JavaScript 也垃圾也乱 ... 但好在开发者一直在听需求在更新 ... 大家忍啊忍啊的就到今天了 ... 这事情扩展开可以说得很大 ... 我就不细说了 ... 总之有些事情一旦被时代所选择 ... 就没那么容易改变了 ... |
26
mxT52CRuqR6o5 2020-01-08 14:50:18 +08:00 via Android
像现在支持一种 js 语言已经很累了,再完善的支持另外一种语言不现实
如果是开发的话,我知道 dart 和 kotlin 都能编译到 js |
27
fox1955 2020-01-08 14:50:54 +08:00
不是名门出身, 但是 es6 以后, js 正走向了完美.
|
28
shintendo 2020-01-08 14:53:53 +08:00
这个问题可以看 DC 的一个关于早期浏览器、js 发展历史的一个讲座,讲得很有趣
&list=PL7664379246A246CB |
29
lolizeppelin 2020-01-08 14:55:16 +08:00 2
|
31
opengps 2020-01-08 15:28:28 +08:00
你可以不写 javascript 也做成网页,纯服务器输出静态 html 也可以是个不错的网站。但是想在客户端二次运行点啥,目前也就得借用 javascript 来实现了
|
32
longjiahui 2020-01-08 15:41:09 +08:00
只有我特别喜欢 js 的吗 0..0
|
33
longjiahui 2020-01-08 15:41:24 +08:00
@longjiahui 没错 只有你一个人
|
34
leekafai 2020-01-08 15:44:27 +08:00
不是时代选择了 JS,是 JS 造就了时代
|
35
DOLLOR 2020-01-08 16:07:44 +08:00 1
dart 在谷歌手里,vbscript 在微软手里,flash 在奥多比手里,唯有 js 比其他的语言更中立、开放,大家都放心用。
|
36
wszgrcy 2020-01-08 16:11:42 +08:00 via Android 3
@longjiahui 你没换号就评论了
|
37
oyjc 2020-01-08 16:16:34 +08:00
凡是能被 WebAssembly 实现的,终将会编译到 WebAssembly,不限于浏览器,WASI 了解一下。
|
38
gzf6 2020-01-08 16:24:05 +08:00
大公司博弈的结果
|
39
bojackhorseman 2020-01-08 16:28:16 +08:00
只是因为它叫 JavaScript,就算不是 js 也可能是其他语言,然后另一个时间线上的也会有人问为什么是它。
|
40
bojackhorseman 2020-01-08 16:29:42 +08:00
@longjiahui #33 我杠我自己
|
41
yxcoder 2020-01-08 16:44:43 +08:00
偶然性和必然性的结果,浏览器需要一门语言,这是必然性,在同时代的竞争下,js 表现最好,这是偶然性
|
42
cmdOptionKana 2020-01-08 16:51:43 +08:00
这个还真是历史原因。
微软试过 VBscript,谷歌试过 Dart,另外当年 Java 也是直接在浏览器内运行的(还一度非常流行)。 还有 flash,曾经一度非常流行,背景音乐、小动画、广告 banner 都用 flash,甚至整个网页直接只提供 flash 版本(真的非常酷炫),这种网站还不少。 微软又企图用 SilverLight 来取代 flash (但完全没搞起来)。 但这些 JS 的竞争对手全部失败告终,反而 JS 越来越完善。 JS 就是命好,本来出生的时候是 “早产儿”,有先天缺陷,但是后来却走运越活越好。 |
43
lonelymarried 2020-01-08 16:52:51 +08:00
不用 js 还能用什么
|
44
ceet 2020-01-08 16:54:31 +08:00
人,为什么非要吃饭不可?
|
45
fffang 2020-01-08 16:54:34 +08:00
难道不是 HTML?
|
46
cmdOptionKana 2020-01-08 17:04:22 +08:00 1
另外补充一个原因。
再谷歌推出 V8 引擎(虽然貌似是收购来的,记不清了,不重要)之前,JS 虽然一直被广泛使用,却也一直危机四伏,很多公司企图推翻它,很多开发者 /用户也希望它被取代,因为以前 JS 运行效率很低,一旦用多了 JS 页面就非常卡! 直到 V8 引擎(或同时代的其他引擎)推出,JS 的地位才开始稳固,特别是采用 V8 的 Node.js 攻占后端,才算迎来爆炸性发展。 而在此背后,是 Google 一直不遗余力推动互联网的“开放性”,Google 一直在做反封闭、保持互联网开放的工作。当然,这是由于符合他家的经济利益,并非因为好心,我们间接受益。 |
47
chenliangngng 2020-01-08 17:27:53 +08:00 via Android 1
|
48
nutting 2020-01-08 17:34:18 +08:00
看你是说历史上还是现在,现在当然是历史原因了,别的用不了啊,浏览器要支持
|
49
longjiahui 2020-01-08 17:35:37 +08:00 1
@bojackhorseman 立于不败之地的方法就是先杀了自己,让别人杀不了我
|
50
crella 2020-01-08 17:35:43 +08:00 via Android
能嵌入到其他程序的语言,除了 lua 还有啥?
我觉得插件形式的始终不靠谱。 |
51
sevenzhou1218 2020-01-08 17:35:57 +08:00 2
就知道有鸟人说是为了蹭 java 的热度,2333
|
52
crella 2020-01-08 17:37:35 +08:00 via Android
还知道一个 visual basic for applications
|
53
lk920724 2020-01-08 18:08:42 +08:00 1
不错的问题,没看到比较满意的回答。
我觉得可能和 火箭推进器的大小 有的相似的连锁反应。 我只知道为什么叫 JavaScript 因为当时 Java 比较火( XSK.PNG ) |
54
IGJacklove 2020-01-08 18:22:12 +08:00
这你不用 JavaScript 写个网站不就明白了么。。。
|
55
coloz 2020-01-08 23:14:15 +08:00
路径依赖和商业选择吧。
老实说早期 js 本身很辣鸡,就是个不健全的语言,作为一个其他语言转前端的开发者,感觉 js 程序猿们津津乐道的各种奇技淫巧其实就是在解决因为语言辣鸡产生的各种问题。 好的是,虽然 es6 开始变得健全了(有了 class ),ts 也很好使,但 js 的更新给人感觉就是在修修补补。。。 |
56
someonedeng 2020-01-09 01:31:39 +08:00
编程语言在自我奋斗的同时也要顺应历史进程 [] . []
|
57
agdhole 2020-01-09 01:42:39 +08:00
历史的进程
|
58
KuroNekoFan 2020-01-09 08:29:39 +08:00 via iPhone
不是因为浏览器只有 js 的 runtime 和 dom 接口?
|
59
BasIrs 2020-01-09 09:10:51 +08:00
不会用 JS,只会用 div,开局一个 div,布局全靠 div
|
60
finaldusk 2020-01-09 09:31:32 +08:00
Blazor
|
61
waltcow 2020-01-09 09:52:15 +08:00
编程语言在自我奋斗的同时当然也要考虑历史的进程的
|
62
xinghuan 2020-01-09 10:19:11 +08:00
遇到一个全网用 JavaScript 的商业网站,垃圾得要死,各种问题
|
63
djyde 2020-01-09 10:21:50 +08:00
历史的话,维基百科说得清清楚楚啊: https://www.wikiwand.com/zh/JavaScript
|
64
djyde 2020-01-09 10:22:45 +08:00
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]。 |
65
huiyadanli 2020-01-09 10:31:38 +08:00
各位别忘记后来的 Flash,一直企图推翻 js。。没想到中途蹦出个 HTML5 标准。。。
记得 09 年的时候很多文章都在唱衰 js |
66
supersonic13 2020-01-09 10:34:34 +08:00
因为 JS
|
67
supersonic13 2020-01-09 10:34:55 +08:00
因为 JS 就是为了网页开发设计出来的。。。
|
68
charlie21 2020-01-09 11:04:27 +08:00 via Android 1
有的人说不清哪里好,可就是因为出现得早。
|
69
TangMonk 2020-01-09 11:07:48 +08:00
这种问题毫无意义,就像求和符号为什么是 Σ,而不是其他,因为欧拉就想这么搞,你有啥办法。
|
70
LokiSharp 2020-01-09 11:16:10 +08:00
可以用 C# .net Core 啊
|
71
ikaros 2020-01-09 11:29:08 +08:00
现在可以用 wasm
|
72
libook 2020-01-09 11:35:34 +08:00
这是个特别宽泛的问题,不是由一个因素决定的,是由多个方面的因素决定的。
维护者是谁? 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 开发资源)。 |
73
ihciah 2020-01-09 12:10:58 +08:00 via iPad
dart 可以翻译成 js,rust 和 go 可以 wasm 一把。(看起来最香的还是 rust ?
|
74
duanxianze 2020-01-09 12:56:48 +08:00
这问题没有任何意义 不是 js 还会有 as bs 历史的偶然决定了现在的必然
|
75
momocraft 2020-01-09 13:47:55 +08:00
路径依赖
|
76
jss 2020-01-09 13:51:21 +08:00
谁说非 JavaScript 不可,TypeScript ?(:手动滑稽
|
77
magicluna01 2020-01-09 13:59:18 +08:00
因为替换的成本太高了
|
78
Phariel 2020-01-09 14:01:43 +08:00
JavaScript 成为标准 有偶然也有必然 故事要从网景时代开始讲起。。。
|
79
fqzz 2020-01-10 11:17:29 +08:00
为什么安卓用 java/kotlin,为什么 iOS 用 oc/swift,为什么 unity 用 c#
|