http://baike.baidu.com/link?url=hB5Veq98C5EuMyLgi4Kd-YwjPUzmczbKyW4MYmhDSIANEctu17QHOZCdQuZJjMxKBXa9ZrC7n7NLEn_mCN8AWq

javascript

编辑

JS即javascript,更多含义,请参阅JS(多义词)。

Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。

目 录

1基本信息

2作者简介

3组成部分

4相关概念

  1. 4.1语句
  2. 4.2函数
  3. 4.3对象
  4. 4.4内置对象
  5. 4.5事件
  6. 4.6变量
  7. 4.7运算符
  8. 4.8表达式

        1

        这种方式应用比较简单,直观,多用于测试
        代码块:
          
        这是最常用的方法,大部分含有Javascript的网页都采用这种方法,例如:
        1
        2
        3
        4
        5
        <script type="application/javascript">
        <!--
        document.write("这是Javascript!采用直接插入的方法!");
        //-Javascript结束-->
        </script>

        在这个例子中,我们可看到一个新的标签:<script>……</script>,而<script language="Javascript"> 用来告诉浏览器这是用Javascript编写的程序,需要调动相应的解释程序进行解释。(w3c已经建议使用新的标准:<script type="application/javascript">)
        HTML的注释标签<!--和-->:用来去掉浏览器所不能识别的Javascript源代码的,这对不支持Javascript 语言的浏览器来说是很有用的。
        注意在非xhtml文档中插入script标签时,如果不是引用外部文件,应该在script内加上cdata声明,避免大于和小于运算符引起的浏览器解析错误
        //-Javascript结束:双斜杠表示Javascript的注释部分,即从//开始到行尾的字符都被忽略。 至于程序中所用到的document.write()函数则表示将括号中的文字输出到窗口中去,这在后面将会详细介绍。 另外一点需要注意的是,<script>……</script>的位置并不是固定的,可以包含在<head>……</head> 或<body>…..</body>中的任何地方。
        还有一个更高级版本的嵌入脚本,它使用了HTML中的CDATA语法(Character Data,就是把CDATA中的文本全部当作纯文本处理,除非遇到CDATA的结束)
        1
        2
        3
        <script language="javascript" type="text/javascript"><!--//--><!CDATA[[//><!--
        //javascript代码
        //--><!]]></script>

        引用方式
        如果已经存在一个Javascript源文件(通常以js为扩展名),则可以采用这种引用的方式,以提高程序代码的利用率。其基本格式如下:
        1
        <script src=“url” type="text/javascript"></script>
        其中的Url就是程序文件的地址。同样的,这样的语句可以放在HTML文档头部或主体的任何部分。如果要实现“直接插入方式”中所举例子的效果,可以首先创建一个Javascript源代码文件“Script.js”,其内容如下:
        document.write("这是Javascript!采用直接插入的方法!");
        在网页中可以这样调用程序:
        1
        <script src="Script.js" type="text/javascript"></script>
        也可以同时在导入文件时制定javascript的版本,例如:
        1
        <script src="Script.js" type="text/javascript; version=1.8"></script>
        注意:凡是指定了src属性的script标签里的内容都会被忽略。

        10脚本调试

        JavaScript Editor

        JavaScript Editor

        随着用JavaScript编程的深入,你会开始理解那些JavaScript给出的不透明错误信息。一旦你理解了你常犯的一般性错误,你就会很快知道怎样避免它们,这样你写的代码中的错误将越来越少。编程实际上是一种能随着时间不断飞快进步的技术。但是不管变得多么熟练,你仍然要花一些时间调试你的代码。如果你做过家庭作业,或有过JavaScript编程经验,你会知道相当多的时间是花在调试上。这很正常- 这只是编程者必须做的事之一。实际上,按照大量的研究,程序员平均百分之五十的时间花在解决代码中的错误。

        调试的技巧:
        根据浏览器的提示信息
        选择浏览器是很重要的,不同的浏览器的错误提示都不同,在浏览器中错误信息最容易理解的,能最快找出错误的,就是firefox和opera了。它们都会给出详细的出错原因和行号。
        使用调试工具
        如果你是Firefox的用户,那么你可以到添加组件的网页中搜索一些用于网页开发的组件
        推荐:Firebug
        一款非常优秀的组件,可以指出你的脚本中的错误,查看DOM树,查看cookie,ajax通信,并且还有CSS的调试工具,而且也有不少firebug的扩展。
        javascript debugger
        这是mozilla开发的调试工具,项目代号叫venkman,和gecko的javascript解析器无缝集成,功能非常强大。
        清除浏览器缓存
        有时浏览器会在网页明明修改过的时候却依然使用缓存里的网页来显示,这时最好强制刷新网页以重新载入数据,如果还不行就清除缓存。
        输出变量
        如果你使用firebug调试的话,可以很方便地在脚本里用console.log()来输出变量的值,而且幸运的是,firebug还会对你输出的变量进行解析,在控制台里显示一个清晰的变量结构
        如果你没有firebug,那么可以用alert代替,不过当有几百个变量输出时,很可能不得不强行关闭浏览器。在网页里专门放置一个调试用的div也是一种不错的解决办法.

        11相关特性

        面向对象性
        javascript中并没有类的概念,但是javascript使用了一种叫“原型化继承”的模型,而且javascript中也有作用域、闭包、继承、上下文对象等概念
        作用域
        作用域是指变量存在的域,在文档中的javascript脚本的作用域都是window。在javascript,function和let分隔作用域
        例如下面这个作用域的例子:
        1
        2
        3
        4
        5
        6
        7
        var myVariable="outside";
        function myFunction(){
        var myVariable="inside";
        alert(myVariable);
        }
        myFunction();
        alert(myVariable);

        结果会是先弹出内容为“inside”的对话框,然后弹出内容为“outside”的对话框,这就是function建立了一个作用域,而第一次提示的是myFunction作用域内的myVariable
        下面是一个let控制作用域的例子:
        1
        2
        3
        var myVariable="outside";
        let(myVarialbe="inside") alert(myVariable); // inside
        alert(myVariable); // outside

        let语句是在javascript 1.7中加入的
        闭包
        闭包也和作用域有关,它指的就是一个封闭的作用域(拥有外部变量,函数无法访问的变量和函数),一般都是用一个匿名函数来做成闭包的
        1
        2
        3
        4
        (function(){
        var myVariable="private"
        })();
        alert(myVariable); // undefined

        闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
        怎么来理解这句话呢?请看下面的代码。

          Js代码
        function f1(){
        var n=999;
        nAdd=function(){n+=1}
        function f2(){
          alert(n);
          }
        return f2;
        }
        var result=f1();
        result(); // 999
        nAdd();
        result(); // 1000
        在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
        为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
        这段代码中另一个值得注意的地方,就是“nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此 nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个
        匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。[1]
        上下文对象
        上下文对象指的就是this对象。它是一个只能读取而不能直接赋值的对象(就是你只能对this拥有的属性和方法赋值)。上下文对象在javascript可以说发挥的淋漓尽致。
        如果你在一个对象(Object)中使用this,指的就是这个对象
        1
        2
        3
        4
        5
        6
        var obj={
        getThis:function(){
        return this;
        }
        };
        alert(obj.getThis()===obj); // true

        同样的,在作用域中已经提到过文档中javascript对象都属于window,那么下面这个例子
        1
        alert(window===this);
        也将提示true。
        上下文对象在事件侦听器中指的就是发生事件的对象
        1
        2
        3
        4
        5
        6
        7
        8
        document.body.addEventListener('click',function(){
        alert(this===document.body); // true
        },false);
        this在构造函数中则是指实例
        function Person(name){
        this .name = name;
        }
        var Sam=new Persom();

        这里this指的就是Sam。

        12相关区别

        与Java的不同

        javascript完全手册

        javascript完全手册

        Java之于Javascript就好比Car(汽车)之于Carpet(地毯)。

        ——来自Usenet上的Javascript讨论组
        中国本地版的说法应该是这样的:Java之于JavaScript就好比雷锋和雷峰塔的关系。
        很多人看到Java和JavaScript都有“Java”四个字,就以为它们是同一样东西,连我自己当初也是这样。事实上,JAVA语言和JavaScript语言是相关的,但是它们的联系并非你想像的那样紧密。首先Java语言是SUN Microsystems公司的产品,而JavaScript是Netscape公司的产品。
        其次它们在功能上也有些差异:Java在客户端的运行的应用程序叫做Java Applet,是嵌在网页中,而又有自己独立的运行窗口的小程序。Java Applet 是预先编译好的,一个Applet 文件(.class)用Notepad 打开阅读,根本不能理解。Java Applet 的功能很强大,可以访问http、ftp等协议,甚至可以在电脑上种病毒(已有先例了)。相比之下,JavaScript 的能力就比较小了。JavaScript 是一种“脚本”(“Script”),它直接把代码写到HTML 文档中,浏览器读取它们的时候才进行编译、执行,所以能查看HTML 源文件就能查看JavaScript 源代码。JavaScript 没有独立的运行窗口,浏览器当前窗口就是它的运行窗口。它们的相同点,我想只有同是以Java 作编程语言一点了。
        Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Java applet。另一方面,Java技术也不断更新。
        Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java 应用程序就可运行。Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
        Java分为三个体系JavaSE、JavaEE、JavaME。

        与JScript不同

        与DOM的关系

        与其他脚本语言

        1
        2
        3
        4
        5
        6
        7
        8
        <script language="vbscript">
        function AL()
        AL = "S"
        end function
        </script>
        <script language="javascript">
        alert(AL());
        </script>

        至于效果就自己看吧。

        13进阶技术

        AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。根据Ajax提出者Jesse James Garrett建议AJAX:
        1.使用XHTML+CSS来表示信息
        2.使用JavaScript操作DOM(Document Object Model)进行动态显示及交互
        3.使用XML和XSLT进行数据交换及相关操作
        4.使用XMLHttpRequest对象与Web服务器进行异步数据交换
        5.使用JavaScript将所有的东西绑定在一起
        6.使用JavaScript 创建模块化的交互用户界面[2]
        AJAX的应用使用支持以上技术的Web浏览器作为运行平台。这些浏览器包括:Internet Explorer、Mozilla、Firefox、Opera、Konqueror及Mac OS的Safari。但是Opera不支持XSL格式对象,也不支持XSLT。

        14程序举例

        编写第一个JavaScript程序
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        <html>
        <head>
        <script type="text/javascript">
        <!--
        document.write("Hello, world!")//直接在浏览器视窗显示。
        alert("Hello, world!")//开启对话视窗显示。
        -->
        </script>
        </head>
        <body>
        </body>
        </html>

        JavaScript代码由<script type="text/javaScript">…</script>说明。在标识<script type ="text/javaScript">…</script>之间就可加入JavaScript脚本。 alert()是JavaScript的窗口对象方法,其功能是弹出一个具有OK对话框并显示()中的字符串。通过<!-- …//-->标识说明:若不认识JavaScript代码的浏览器,则所有在其中的标识均被忽略;若认识,则执行其结果。使用注释这是一个好的编程习惯,它使其他人可以读懂这种语言。JavaScript 以</Script> 标签结束。

        15相关版本

        版本历史

        版本
        发布日期
        基于
        Netscape Navigator
        Mozilla Firefox
        Internet Explorer
        Opera
        Safari
        谷歌Chrome
        1.0
        1996年3月
         
        2.0
         
        3.0
             
        1.1
        1996年8月
         
        3.0
                 
        1.2
        1997年6月
         
        4.0-4.05
                 
        1.3
        1998年10月
        ECMA-262 1 edition / ECMA-262 2 edition
        4.06-4.7x
         
        4.0
             
        1.4
           
        Netscape
        Server
                 
        1.5
        2000年11月
        ECMA-262 3 edition
        6.0
        1.0
        5.5 (JScript 5.5),
        6.(JScript 5.6),
        7.(JScript 5.7),
        8.(JScript 6)
        6.0,
        7.0,
        8.0,
        9.0
           
        1.6
        2005年11月
        1.5 + Array extras + Array and String generics + E4X
         
        1.5
           
        3.0, 3.1
         
        1.7
        2006年10月
        1.6 + Pythonic generators + Iterators + let
         
        2.0
           
        3.2, 4.0
        1.0
        1.8
        2008年6月
        1.7 + Generator expressions + Expression closures
         
        3.0
               
        1.8.1
         
        1.8 + Minor Updates
         
        3.5
               
        1.9
         
        1.8.1 + ECMAScript 5 Compliance
         
        4
               

        版本标准

        16发展历史

        大概在1998年,一家称作Nombas的公司开始开发一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚本语言。这个脚本语言捆绑在一个叫做CEnvi的共享软件产品中,当Netscape Navigator崭露头角时,Nombas开发了一个可以嵌入网页中的CEnvi的版本。这些早期的试验称为EspressoPage(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端脚本语言。而Nombas丝毫没有料到它的理念将会成为因特网的一块重要基石。

        17常见问题

        JavaScript是Java的变种吗?
        JavaScript最初的确是受Java启发而开始设计的,而且设计的目的之一就是“看上去像Java”[2],因此语法上有很多类似之处,许多名称和命名规范也借自Java。但是实际上,JavaScript的主要设计原则源自Self和Scheme[3],它与Java本质上是不同的。它与Java名称上的近似,是当时网景为了营销考虑与Sun公司达成协议的结果。其实从本质上讲javascript更像是一门函数式编程语言.而非面向对象的语言,它使用一些智能的语法和语义来仿真高度复杂的行为。其对象模型极为灵活、开放和强大,具有全部的反射性。
        JavaScript与JScript相同吗?
        为了取得技术优势,微软推出了JScript脚本语言。Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。
        JavaScript是一门简单的语言吗?
        尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的编程语言来推广和宣传,但是JavaScript是一门具有非常丰富特性的语言,它有着和其他编程语言一样的复杂性,或更甚复杂。实际上,你必需对JavaScript有扎实的理解才能用它来撰写比较复杂的程序。
        Java 和 JavaScript 是相同的吗?
        不同!
        在概念和设计方面,Java 和 JavaScript 是两种完全不同的语言。
        java(由太阳微系统公司开发)很强大,同时也是更复杂的编程语言,就像同级别的 C 和 C++。

        18其他程序

        Jquery
        Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。
        Ext
        Ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了。 主要包括data、widget、form、grid、dd、menu,其中最强大的应该算grid了,编程思想是基于面向对象编程(oop),扩展性相当的好.可以自己写扩展,自己定义命名空间。web应用可能感觉太大.不过您可以根据需要按需加载您想要的类库就可以了。
        主要包括三个大的文件:ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减.官方网站提供这一接口),在引用ext类库的时候,这三个文件必不可少。
        它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建富客户端的常用的组件。
        从 Ext 2开始,商业版(针对那些以盈利为目的的开发方)要收费了。这可能会影响一些他的应用前景。
        目前的最新版本为4.2.0
        prototype
        prototype.js是由Sam Stephenson写的一个javascript类库。该框架的设计思路巧妙,而且兼容标准的类库,能够帮助开发人员轻松建立有交互性良好的web2.0特性富客户端页面。