这两天再看javascript高级教程:http://www.w3school.com.cn/js/pro_js_implement.asp这里面讲了ECMAScript与javascript的关系,看了之后理解的还是不太清楚。
希望大家能帮我解答一下这些问题。1,ECMAScript是一套标准或者规范,它定义了一种脚本语言的应该是什么样子,那么ECMAScript本身是一种脚本语言吗?    我的理解是,首先ECMAScript是一套标准,定义了一种语言(假如A语言)是什么样子,然后呢,它又自己实现了A语言(A语言的语法、类型、语句、关键字、保留字、运算符、对象都是标准定义或者描述的那样。),然后呢A语言的名字也叫ECMAScript,现在ECMAScript即是一套标准,又是一种脚本语言。2,这句话更让我糊涂“每个浏览器都有它自己的 ECMAScript 接口的实现,然后这个实现又被扩展”,ECMAScript的接口是个啥东西,这些接口都是什么接口,操作什么的,这些接口和前面的标准是什么关系?3,关于DOM,教程中有这么一句话:“Web 浏览器中的 DOM 已经用 ECMAScript 实现了,现在是 JavaScript 语言的一个很大组成部分”,这似乎说明ECMAScript是脚本语言,否则怎么会实现DOM的接口呢。

解决方案 »

  1.   

    "ECMAScript是一套标准,定义了一种语言(假如A语言)是什么样子"---完全正确
    也就是说它只是定义了接口,规则,然后由各大浏览器厂商去实现这些接口,根规则.具体的实现代码救在浏览器中,你是看不到的,比如Array.join()这个方法,ECMAScript只是定义,浏览器去具体实现
    而DOM就是文档对象模型,是独立于语言(语言无关的,java中也有实现,javascript中也有实现)的规范.
      

  2.   

    1,作为编程语言来说,你把标准看作是这种语言,对于使用来说基本没影响。这就象你学会了某种有特殊生产要求的汽车的驾驶(比如吊车,推土机),那么不管哪个厂商生产出来的,你都会操作,也只管操作就是了。哪怕你是汽车生产线上的工人,也只是按章办事。除非等你到了能设计汽车的时候(而不是象国内一些名厂那样只会照别人图纸稍加改动的进行生产),那应该还很遥远。2,浏览器对ECMAScript的接口就是ECMAScript所规定的那些语法标准,你按照ECMAScript语法标准所写的东西,浏览器要能够把它解释执行出来。这就涉及上面的问题,ECMAScript本身并没有具体的统一的实现和实体,要由浏览器厂商完成。这就好像规定了一个标准的进销存管理系统应该有哪些必须的功能,然后各个软件公司自己编写实现。所谓的扩展,就是这些公司出于各种考虑而在基本功能之外,另外增加的一些功能。比如IE有自己的滤镜和ACTIVEX机制等,而FF,CHROME也有一些自己的东西。当你针对它们编程时,可以使用那些特性,但对象改变了,就会失效或出错。常说的脚本兼容就是指这些标准化以外的东西。3,进行实现的不是ECMAScript,而是按照ECMAScript标准进行实现了。“用工具”,“用标准”,都是用,具体哪个用,就得好好理解了。
      

  3.   

    谢谢你的回答,按照你的说法,我的理解如下
    第一个问题:ECMAScript就是一个标准或者规范,它就是文字性的描述了一种语言是什么样子。
    第二、三个问题:ECMAScript的标准被javascript实现了,然后DOM的接口是浏览器通过ECMAScript定义语法实现的。所以呢,DOM可以作为javascript的一个组成部分,因为他们的语法各方面都是一样的。相当于javascript的一个组件,除此之外浏览器也定义自己的一部分接口,并进行实现,相当于扩展了ECMAScript的接口。
    以上是我对于您的解释的理解,请在复查一下。另外我又有一个问题:
    是浏览器实现了ECMAScript还是javascript实现了ECMAScript,我的理解是javascript实现了ECMAScript,浏览器来解释执行javascript,为什么会说浏览器也实现了ECMAScript呢?难道是因为浏览器通过ECMAScript定义的语法实现了DOM的接口就认为浏览器实现了ECMAScript吗?
    谢谢您的回答!
      

  4.   

    谢谢你的回答,为什么说是各大浏览器厂商去实现呢,而不是javascript之类的去实现?浏览器不是负责解释执行javascript吗?
      

  5.   

    引擎不一样的,每个浏览器实现的方法不一样,要是都按照ECMA,就没那么多兼容性问题了,js程序员就省心多了~
      

  6.   


    不知道你为什么要来纠结这些东西2楼的其实已经说得很清楚了就好比一部车,有发动机,有轮胎,有方向盘等等。这就是对车的一种标准化的定义然后每个汽车生产厂商,可以做出不同性能,不同款式的车来。但归根结底,大家都有一样的东西。只是实现的方法不同。有的性能好点。比如自带导航了。这就好比进行扩展了不管是javascript或才是jscript都只是对这套标准的一个扩展我们用javascript去构造一些函数实现我们自己的功能,只是好比于我们是开车的人,你做的所有的事情都只是在你开的这部车允许你做的范围之内。你的车只是陆路上走走而已的,你不可能开着它在水下还跑得若无其事大概就这么个意思吧
      

  7.   

    你好,你说的每种浏览器实现的方法不一样,到底是实现什么呢,难道不是javascript实现ECMAScript,然后浏览器负责执行javascript吗?还是说每种浏览器按照ECMAScript实现自己的javascript?
      

  8.   

    javascript或者jscript是ECMAScript的一种实现,这个我是理解的,比较纠结的一点是浏览器与ECMAScript的关系,我已经说了我的理解:浏览器通过ECMAScript实现了DOM的接口,使对DOM的操作成为javascript的一部分,然后浏览器在解释执行javascript。你觉得我这么理解对吗?就像二楼列举的例子,根据标准(ECMAScript)生产出来车(javascript、jscript),那么在这个例子中浏览器比作什么呢,高速公路吗,但是高速公路不生产车啊,它只能让车跑。
      

  9.   

    ECMAScript提供是汽车的蓝图,规定了里面要有些什么东东,实现什么功能浏览器厂商是造车的,将蓝图变为现实,但因为厂家不一样,技术手法不一样。所以,虽然功能一样[可以跑了,也有方向盘了]。但使用的方法却有可能不一样[有的直接钥匙打火,有的按个按钮就可以打火,有的遥控也行];又有的厂家概念超前点,或者细致点。就做出了好多体贴的功能出来。这就好比扩展了。它们造出来的车就好比是:javascript或jscript;因为各自的实现手法不一样,就出现了我们常说的兼容性问题;因为这台车反正可以用,但怎么用却不一定相同。咱们是开车的应该是这么理解吧。我都看得有点乱了
      

  10.   

    ECMAScript既然是个标准,那么其实就类似于编程语言的接口,定义一套规范之后,各大浏览器厂商只要遵循这个规范就各自实现去吧,那么当然每个浏览器都做了一些扩展,即:规范里面没有的。
      

  11.   

    谢谢各位的指点,我想我纠结的东西已经明白了。
    对于javascript这种脚本语言的理解上我理解偏了,也就是对ECMAScript标准的实现理解偏了,所谓的实现是实现一种脚本语言,而不是我理解的接口。
    之前以为javascript就是某一个组织或者人编写完之后,然后各个浏览器厂商通过js引擎来解释执行,其实不然。
    其实是通过ECMAScript制定的标准,各浏览器厂商以此标准实现了自己的“javascript”,这些javascript基本的东西都是一样的,比如语法、类型......。除此之外浏览器厂商还做了一些扩展。
    再次谢谢你们!
      

  12.   

    前面的你都理解了。后面的还是差一点。javascript其实只是理论概念上的一个合集,它包含了标准的ECMAScript部分,也包含了各个浏览器厂商自己附加的扩展功能部分。至于实现它们的,不是它们中的哪个,而是更底层的编程语言,比如C或C++。这一点的不了解,好像是导致你困惑的根本原因吧。
      

  13.   

    你若想知道某个语言是由什么语言实现的,我可以大概给你讲个不太精确的语言递进关系:机器语言(包括更早期用打孔纸写的第一代程序)-> 汇编语言 -> C和其它一些三代语言 ->  JAVASCRIPT .这是编程语言的演变历史,其层次并非一定是前面的直接编写实现了后者,但JAVASCRIPT引擎一般还都是用C写的。也就是说你困惑的问题答案是,C写了能解析运行JAVASCRIPT的脚本引擎。而JAVASCRIPT包括符合公共的ECMAScript标准的部分和各厂商自己扩展增加的部分。
      

  14.   

    对于ECMAScript和javascript之间的关系我和楼主一样困惑,但是theforever 的回答很让我受启发
      

  15.   

    谢谢“theforever ”的耐心回答,