javascript

 

javascript

求助编辑百科名片

 

http://baike.baidu.com/view/16168.htm

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

编辑本段基本概念

  JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司的注册商标。[1] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。 
  Netscape公司在最初将其脚本语言命名为LiveScript。在Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[2],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme[3].JavaScript与Java名称上的近似,是当时网景为了营销考虑与Sun公司达成协议的结果。为了取得技术优势,微软推出了JScript来迎战JavaScript的脚本语言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)创建了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的编程语言来推广和宣传,但是JavaScript具有非常丰富的特性。
  目前javascript的最新版本为1.9版。

1、运算符

  运算符就是完成操作的一系列符号,它有七类:
  赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=)、算术运算符(+,-,*,/,++,--,%)、比较运算符(>,<,<=,>=,==,===,!=,!==)、逻辑运算符(||,&&,!)、条件运算(?:)、位移运算符(|,&,<<,>>,~,^)和字符串运算符(+)。
  可能很多人不知道"==="是什么。
  在这里,我为大家解释一下,在JavaScript中,“==="是全同运算符。
  等同运算符的比较规则:
  当两个运算数的类型不同时:将他们转换成相同的类型, 1)一个数字与一个字符串,字符串转换成数字之后,进行比较。
  2)true转换为1、false转换为0,进行比较。
  3)一个对象、数组、函数与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较。(先使用valueOf,如果不行就使用toString)
  4)其他类型的组合不相等。
  想两个运算数类型相同,或转换成相同类型后:
  1)2个字符串:同一位置上的字符相等,2个字符串就相同。
  2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。
  3)2个都是true,或者2个都是false,则相同。
  4)2个引用的是同一个对象、函数、数组,则他们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。
  5)2个null,或者2个都是未定义的,那么他们相等。
  而“===”是全同运算符,全同运算符遵循等同运算符的比较规则,但是它不对运算数进行类型转换,当两个运算数的类型不同时,返回false;只有当两个运算数的类型相同的时候,才遵循等同运算符的比较规则进行比较。
  例如:null==undefined 会返回真, 但是null===undefined 就会返回假!

2、表达式

  运算符和操作数的组合称为表达式,通常分为四类:赋值表达式、算术表达式、布尔表达式和字符串表达式。

3、语句

  JavaScript程序是由若干语句组成的,语句是编写程序的指令。JavaScript提供了完整的基本编程语句,它们是:
  赋值语句、switch选择语句、while循环语句、for循环语句、for each循环语句、do while循环语句、break循环中止语句、continue循环中断语句、with语句、try…catch语句、if语句(if..else,if…else if …)。

4、函数

  函数是命名的语句段,这个语句段可以被当作一个整体来引用和执行。使用函数要注意以下几点:
  1)函数由关键字function定义(也可由Function构造函数构造)
  2)使用function关键字定义的函数在一个作用域内是可以在任意处调用的(包括定义函数的语句前);而用var关键字定义的必须定义后才能被调用
  3)函数名是调用函数时引用的名称,它对大小写是敏感的,调用函数时不可写错函数名
  4)参数表示传递给函数使用或操作的值,它可以是常量,也可以是变量,也可以是函数,在函数内部可以通过arguments对象(arguments对象是一个伪数组,属性callee引用被调用的函数)访问所有参数
  5)return语句用于返回表达式的值。
  6)yield语句扔出一个表达式,并且中断函数执行直到下一次调用next。
  一般的函数都是以下格式:
  function myFunction(params){
  //执行的语句
  }
  函数表达式:
  var myFunction=function(params){
  //执行的语句
  }
  var myFunction = function(){
  //执行的语句
  }
  myFunction();//调用函数
  匿名函数,它常作为参数在其他函数间传递:
  window.addEventListener('load',function(){
  //执行的语句
  },false);

5、对象

  JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。
  一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色。

6、事件

  用户与网页交互时产生的操作,称为事件。事件可以由用户引发,也可能是页面发生改变,甚至还有你看不见的事件(如Ajax的交互进度改变)。绝大部分事件都由用户的动作所引发,如:用户按鼠标的按键,就产生click事件,若鼠标的指针在链接上移动,就产生mouseover事件等等。在JavaScript中,事件往往与事件处理程序配套使用。
  而对事件的处理,W3C的方法是用addEventListener()函数,它有三个参数:事件,引发的函数,是否使用事件捕捉。为了安全性,建议将第三个参数始终设置为false
  传统的方法就是定义元素的on…事件,它就是W3C的方法中的事件参数前加一个“on”。而IE的事件模型使用attachEvent和dettachEvent对事件进行绑定和删除。JavaScript中事件还分捕获和冒泡两个阶段,但是传统绑定只支持冒泡事件。

7、变量

  如 var myVariable = "some value";
  变量有它的类型,上例中myVariable的类型为string(字符串)
  javascript支持的常用类型还有:
  object:对象
  array:数组
  number:数
  boolean:布尔值,只有true和false两个值,是所有类型中占用内存最少的
  null:一个空值,唯一的值是null
  undefined:没有定义和赋值的变量
  实际上JavaScript的变量是弱变量类型,你赋值给他的是字符串,他就是String .
  是数字他就是整型。是true和false他就是boolean型(注意,不能加引号,不然会被当成字符串处理)。

编辑本段基本特点

  能够具有交互性,能够包含更多活跃的元素,就有必要在网页中嵌入其它的技术。如:Javascript、VBScript、Document Object Model(DOM,文档对象模型)、Layers和Cascading Style Sheets(CSS,层叠样式表),这里主要讲Javascript。那么Javascript是什么东东?Javascript就是适应动态网页制作的需要而诞生的一种新的编程语言,如今越来越广泛地使用于Internet网页制作上。Javascript是由 Netscape公司开发的一种脚本语言(scripting language),或者称为描述语言。在HTML基础上,使用Javascript可以开发交互式Web网页。Javascript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。运行用Javascript编写的程序需要能支持Javascript语言的浏览器。Netscape公司 Navigator 3.0以上版本的浏览器都能支持Javascript程序,微软公司Internet Explorer 3.0以上版本的浏览器基本上支持Javascript。微软公司还有自己开发的Javascript,称为JScript。Javascript和Jscript基本上是相同的,只是在一些细节上有出入。 Javascript短小精悍,又是在客户机上执行的,大大提高了网页的浏览速度和交互能力。 同时它又是专门为制作Web网页而量身定做的一种简单的编程语言。
  JavaScript 使网页增加互动性。JavaScript 使有规律地重复的HTML文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由CGI 验证。JavaScript 的特点是无穷无尽的,只要你有创意。

编辑本段开发工具

  在今天网络开发方面,JavaScript起了很关键的作用;像jQuery, MooTools, Prototype等等JavaScript框架以及其它JavaScript类库让我们的生活轻松了不少。但是随着Rich Internet Applications(RIA)的面世及迅速应用,书写更强大,更坚实可靠的JavaScript的需要日益迫切。
  javascript程序是纯文本的,且不需要编译,所以任何纯文本的编辑器都可以编辑javascript文件。

测试

  JSLint –JavaScript的验证器
  JSLint取得一个JavaScript源代码并对其扫描。如果发现问题,它送回信息描述问题状况及在源代码中的大概位置。问题不一定就出在句法上,不过常常正是这里出错。JSLint查看一些风格约定和结构问题,它证明不了程序是否正确。它只是提供了另一双眼睛来帮助发现问题。
  JsUnit
  JsUnit是一个客户端(内浏览器)JavaScript单元测试框架。它其实是JUnit给JavaScript的一个口岸。其中还有一个平台来在多个浏览器上以及运行不同操作系统的多个机器上的自动执行测试。
  YUI Test
  YUI Test是一个测试框架,它针对基于浏览器的JavaScript解决方案。你可以用YUI Test在JavaScript 解决方案上轻松添加单元测试。
  Obtrusive JavaScript Checker
  可作为Firefox扩展,Greasemonkey用户脚本,以及Ubiquity命令;Obtrusive JavaScript Checker是一种可以扫过页面上所有元素的工具,发现带有行内事件的HTML元素(这是有危害性的,JavaScript应该是不张扬的)时,它给这部分加红边使其凸显。 
  Crosscheck
  Crosscheck是一个开源测试框架,验证内浏览器JavaScript代码。它帮助你确保代码可以在Internet Explorer和Firefox等种种不同的浏览器上运行,而这些浏览器都不需要安装。
  JSLitmus
  JSLitmus是一个轻量级工具用来制作JavaScript的特定标准测试。
  JavaScriptMVC的测试插件
  JavaScriptMVC的测试库提供事件模拟,单元测试,Ajax 夹具,和一个控制台程序。

调试

  Javascript调试工具包
  JavaScript调试工具包是一种跨浏览器调试JavaScript的eclipse plugin,它可以在IE,Firefox,Safari,Chrome,Opera甚至是移动浏览器上调试JavaScript。
  Firebug
  作为最受欢迎的网页开发程序工具,Firebug是Firefox的一个插件,可以用它在任何网页上现时编辑,调试和监控CSS, HTML, 和JavaScript。它提供给JavaScript登陆和调试控制台一些有用的功能如AJAX requests logging,JavaScript解释器,DOM explorer等等。Firebug Lite 可以在IE, Opera, 和Safari上使用。
  Venkman
  Venkman为基于Gecko的浏览器提供功能强大JavaScript调试环境。这个调试器以Firefox & Mozilla插件的形式使用。可以在用户界面上和控制台命令中使用断点管理,调用栈检查,变量/对象检查等功能,可以让你以最习惯的方式调试。
  NitobiBug
  NitobiBug是一种基于浏览器的JavaScript对象记录和检查工具——与Firebug作用相似。NitobiBug在可以在不同的服务器(IE6+, Safari, Opera, Firefox)上运行以提供开发各种Ajax应用程序一致且功能强大的工具。 
  DamnIT
  DamnIT是一种免费服务,当用户在网页上遇到JavaScript错误时它会给你发送电子邮件。
  JS Bin
  JS Bin是一种在线网络应用程序,为帮助JavaScript开发者在一定情景里测试代码片段以及协作调试代码而特别设计。你可以用JS Bin在线编辑测试JavaScript和HTML代码。一旦完成,你可以将URL保存并发送给同伴来进行审查或获得帮助。
  Blackbird
  许多JavaScript开发者仅仅使用alert()来显示各种信息调试代码。Blackbird在JavaScript上提供了记录信息的简单方式以及一个引人注意的控制台程序来察看并过滤信息。

HTTP监控

  Fiddler
  Fiddler是一种Web调试代理,它记录你的电脑和网络之间所有的HTTP(S)流量。可以用Fiddler检查所有HTTP(S)流量,设置断点,干涉进来或出去的数据。
  TamperData
  TamperData是一个追踪并修改http/https请求的Firefox扩展。可以用它做基于网络的应用程序的安全测试,追踪请求/回应。
  Live HTTP Headers
  可以在浏览的时候查看网页的HTTP headers。可以用Live HTTP Headers调试网页应用程序,找出远端网站使用的是那种网站服务器,或者查看远端网站发送的小数据文件。

文件

  jGrouseDoc
  jGrouseDoc可以从源代码中的注释生成API文件。你可以用这个工具记载你需要的所有构造——不仅有函数和变量,还有类文件包,界面,命名空间,包和其它。使用那种JavaScript框架是无关紧要的——你可以不采取框架或工具强加的方式而以自己希望的方式记录代码,
  JSDoc Toolkit
  JavaScript的一种文件产生器,以JavaScript形式写成;它自动从加注的JavaScript源代码中生成格式模版化,多页面HTML(或XML, JSON, 抑或其它文本)。

压缩

  Online Javascript Compression Tool
  一个可以用一些压缩算法如JSMin 和Packer压缩JavaScript文件的在线JavaScript压缩器。压缩的JavaScript文件是生产环境中的理想文件,因为它们常常将文件大小减小30-90%。在很大程度上,文件尺寸的缩小是通过除去网页浏览者或访问者不需要的注释和多余的空格字符来实现的。
  Scriptalizer
  一个将多个JavaScript文件组合为一个文件的在线工具。
  Dojo ShrinkSafe
  一种命令行实用程序,允许你用浏览器缩小文件大小,从而缩短响应时间。Dojo压缩器不是建立在脆弱的规则表达式基础上的。它基于来自莫兹拉专案的JavaScript引擎。由于一个基于真正的parse stream,Dojo压缩器比基于规则表达式的工具可以更好体现代符(变量名等等)的环境。
  YUI Compressor
  The YUI Compressor是一种JavaScript压缩器。去除注释和空格之外,它还可以用最小可用变量名混淆局部变量。即使在使用‘eval’或‘with’之类构造(在这些情况下压缩并不合适),这种混淆也是安全的。与jsmin相比,它平均节省20%。

格式化

  JavaScript代码美化工具
  这个美化工具可处理散乱或压缩的JavaScript代码,不断对其进行快速的格式化并使其可读。

编辑程序&集成开发环境

  Aptana Studio
  Aptana Studio是一个完整的网络开发环境。它提供有JavaScript代码自动完成和调试,HTML/CSS/JavaScript代码提示,以及对重要的Ajax类库的支持。Aptana Studio甚至给你页面上所有的,包括你自己的JavaScript提供代码提示。
  Komodo Edit
  Komodo Edit是一种免费开放的源编辑程序。它提供自动完成,调用提示,多种语言支持,语法高亮颜色显示,语法检查,Vi emulation,Emacs快捷键绑定等等功能。扩展Komodo Edit是其最实用的功能之一。你会发现各种对JavaScript开发者有用的扩展(如JSLint plugin for Komodo, Venkman JavaScript Debugger,等等)。
  Spket IDE
  Spket IDE是JavaScript和XML开发功能强大的工具包。JavaScript, XUL/XBL and Yahoo! Widget开发功能强大的编辑器。JavaScript编辑器有代码完成,语法高亮显示和内容概要等功能,这些功能帮助开发者高效制作出有效的JavaScript代码。Spket IDE为非商业用途免费提供。

其它工具

  Google的AJAX APIs Playground
  AJAX API Playground装载有Google JavaScript APIs(Maps, Search, Feeds, Calendar, Visualization, Language, Blogger, Libraries和Earth,等等)例子,你可以编辑运行这些例子帮助你探究Google的APIs可提供的功能。同时也还有保存和输出功能。你可以用保存功能保持编辑的例子以留待以后使用。而输出功能可用来修改例子并把代码公布在一个永久的URL上。
  QuirksMode –相容性表
  检查CSS2, CSS3, DOM Core, DOM HTML, DOM CSS, DOM Events 和CSS Object Model View主要浏览器相容性状态的最受欢迎的出处。
  HTML到JavaScript转换器
  HTML到JavaScript转换器获得置标并将它转换成一系列可以在JavaScript块中使用的document.write()申明。
  Glimmer
  Glimmer是一种桌面应用软件,可以用它利用jQuery库的作用在网页上轻松制作交互式元素。可以用它轻松制作交错感受如旋转相册/报头,下拉导航,悬停效果,或自定义动画。
  jQuery Function Builder
  你可以用这个工具很快建立一个函数集,当页面加载完毕/准备完毕时,调用该函数集。
  JavaScript Regex Generator
  一个制作正则表达式的在线工具。

其它浏览器扩展

  Firefox, Flock & Seamonkey的网络开发人员扩展
  网络开发人员拓展在浏览器中增加了一个菜单和工具条,其中包含许多网络开发工具包括能使你的XHTML生效,发现JavaScript/CSS的错误,网页结构可视化,测试网络表单,改变运行中的XHTML,检查HTTP头信息等等。
  Opera Dragonfly
  Opera Dragonfly 是Opera浏览器的跨设备,跨平台调试环境—调试JavaScript, 检查编辑CSS和DOM,并且查看移动设备或计算机上的错误。
  IE6/7的开发者工具条
  微软的英特网浏览器开发者工具条为网页的快速创建,理解和故障诊断提供了各种的工具。

编辑本段使用技巧

  Javascript加入网页有两种方法:直接方式和引用方式。

直接方式

  这是最常用的方法,大部分含有Javascript的网页都采用这种方法,如:
  <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的结束)
  <script language="javascript" type="text/javascript"><!--//--><!CDATA[[//><!--
  //javascript代码
  //--><!]]></script>

引用方式

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

脚本的调试

  

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也是一种不错的解决办法.

编辑本段相关概念

  客户端脚本语言
  不同于服务器端脚本语言,例如PHP与ASP,JavaScript是客户端脚本语言,也就是说JavaScript是在用户的浏览器上运行,不需要服务器的支持而可以独立运行。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。
  JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。解释语言的弱点是安全性较差,而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。而且由于每次重新加载都会重新解译,加载后,有些代码会延迟至运行时才解译,甚至会多次解译,所以速度较慢。
  与其相对应的是编译语言,例如Java。Java的源代码在传递到客户端运行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。但是它必须在服务器端进行编译,这样就拖延了时间。但因为已经封装,所以能保证安全性。

面向对象性

  javascript中并没有类的概念,但是javascript使用了一种叫“原型化继承”的模型,而且javascript中也有作用域闭包继承上下文对象等概念
  
  作用域
  作用域是指变量存在的域,在文档中的javascript脚本的作用域都是window。在javascript,function和let分隔作用域
  例如下面这个作用域的例子:
  var myVariable="outside";
  function myFunction(){
  var myVariable="inside";
  alert(myVariable);
  }
  myFunction();
  alert(myVariable);
  结果会是先弹出内容为“inside”的对话框,然后弹出内容为“outside”的对话框,这就是function建立了一个作用域,而第一次提示的是myFunction作用域内的myVariable
  下面是一个let控制作用域的例子:
  var myVariable="outside";
  let(myVarialbe="inside") alert(myVariable); // inside
  alert(myVariable); // outside
  let语句是在javascript 1.7中加入的
  闭包
  闭包也和作用域有关,它指的就是一个封闭的作用域(拥有外部变量,函数无法访问的变量和函数),一般都是用一个匿名函数来做成闭包的
  (function(){
  var myVariable="private",
  })();
  alert(myVariable); // undefined
  上下文对象
  上下文对象指的就是this对象。它是一个只能读取而不能直接赋值的对象(就是你只能对this拥有的属性和方法赋值)。上下文对象在javascript可以说发挥的淋漓尽致。
  如果你在一个对象(Object)中使用this,指的就是这个对象
  var obj={
  getThis:function(){
  return this;
  }
  };
  alert(obj.getThis===obj); // true
  同样的,在作用域中已经提到过文档中javascript对象都属于window,那么下面这个例子
  alert(window===this);
  也将提示true。
  上下文对象在事件侦听器中指的就是发生事件的对象
  document.body.addEventListener('click',function(){
  alert(this===document.body); // true
  },false);
  this在构造函数中则是指实例
  function Person(name){
  thisname=name;
  }
  var Sam=new Persom();
  这里this指的就是Sam。

Javascript库

  库,指得是可以方便应用到现有开发体系中的、现成的代码资源。库不仅为大部分日常的DOM脚本编程工作提供了快捷的解决方案,而且也提供了许多独特的工具。虽然库使用起来很方便,但它们也并非能解决你所有的问题。在使用库之前,一定要保证真正理解javascript的DOM原理。
  这些库一般是一个(或多个)js(Javascript的缩写)文件,只要把他们导入你的网页就能使用了。
  常用的库有:
  jQuery:javascript库中的新成员,提供cssxpath选择符查找元素、ajax、动画效果等
  dojo:一个巨大的库,包括的东西很多,dijit和dojox是dojo的扩展,几乎你想要的各种javascript程序都包括了。
  prototype:一个非常流行的库,使用了原型链向javascript中添加了很多不错的函数
  YUI:(YahooYUI库)yahoo!用户界面,非常实用,提供各种解决方案。
  ExtJs:组件非常丰富,皮肤也很漂亮,动画效果也丰富。

与Java的不同

  

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不同

  JScript是Microsoft公司开发的,Javascript是Netscape公司开发的,虽然他们是死对头,但是在现在的浏览器中,无论你把语言指定为Javascript 还是Jscript,浏览器都会综合他们两个语言的特性,所以,即使把语言指定为Javascript,用几句JScript也是没问题的。
  虽然浏览器综合了两种语言的特性,但是对于那些对脚本语言熟悉的程序员来说,还是Jscript的实用性更强。如果你在网上察看Javascript和Jscript的手册,你会发现Jscript的运算符比Javascript的多得多,所以许多库(比如Concurrent、Thread)都是采用Jscript的格式编写的。

其他脚本语言的关系

  Visual Studio 2008之前的版本可以使用debugger来调试。
  Javascript不是一个预编译语言,所以虽然Javascript的作者尽量把它写得强大,但是仍然有一些功能无法实现,而且对于那些对VBscript熟悉而对Javascript 却较陌生的程序员来说,这是一个很头疼的难题,因为VBscript也只是一门脚本语言,当然没有VB 强大。
  许多浏览器(如IE)都提供了脚本互通,但是网上对此的介绍不多,最多在应用问题上提到一点。Javascript和VBscript的互通性很好,而且在VBArray(Javascript不支持多维数组)和ASCII(Javascript不能把字符转成ASCII)中都得到了应用,这方面基础VBScript做得很好。所以它的代码的大致意思就是Javascript可以用VBScript的自定义函数和变量(当然不能用内置变量和函数)通过转换调用内置函数
  <script language="vbscript">
  function AL()
  AL = "S"
  end function
  </script>
  <script language="javascript">
  alert(AL());
  </script>
  至于效果就自己看吧。

与DOM的关系

  DOM是Document Object Model(文档对象模型)的简称,它是让javascript与页面交互的一种方式,能够动态修改文档中的节点、元素、属性等。
  DOM不仅适用于xhtml文档,对于所有的xml文档dom都是可以使用的。
  DOM的级别
  1级:基本的节点操作一级里都包括了
  2级:增加了对样式表、文档显示、事件处理等的支持
  3级:可以用javascript加载和保存文档、检查文档错误。

进阶技术AJAX

  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将所有的东西绑定在一起。
  AJAX的应用使用支持以上技术的Web浏览器作为运行平台。这些浏览器目前包括:Internet ExplorerMozillaFirefoxOpera、Konqueror及Mac OS的Safari。但是Opera不支持XSL格式对象,也不支持XSLT。

编辑本段其他

编写第一个JavaScript程序

  <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> 标签结束。

提升JavaScript的运行速度

  递归是拖慢脚本运行速度的大敌之一。太多的递归会让浏览器变得越来越慢直到死掉或者莫名其妙的突然自动退出(在firefox中弹出脚本无响应的对话框),所以我们一定要解决在JavaScript中出现的这一系列性能问题。在这个系列文章的第二篇中,我曾经简短的介绍了如何通过memorization技术来替代函数中太多的递归调用。memoization是一种可以缓存之前运算结果的技术,这样我们就不需要重新计算那些已经计算过的结果。对于通过递归来进行计算的函数,memoization简直是太有用了。我现在使用的memoizer是由Crockford写的,主要应用在那些返回整数的递归运算中。当然并不是所有的递归函数都返回整数,所以我们需要一个更加通用的memoizer()函数来处理更多类型的递归函数。
  function memoizer(fundamental, cache){ cache = cache || {} var shell = function(arg){ if (!(arg in cache)){ cache[arg] = fundamental(shell, arg) } return cache[arg]; }; return shell;}这个版本的函数和Crockford写的版本有一点点不同。首先,参数的顺序被颠倒了,原有函数被设置为第一个参数,第二个参数是缓存对象,为可选参数,因为并不是所有的递归函数都包含初始信息。在函数内部,我将缓存对象的类型从数组转换为对象,这样这个版本就可以适应那些不是返回整数的递归函数。在shell函数里,我使用了in操作符来判断参数是否已经包含在缓存里。这种写法比测试类型不是undefined更加安全,因为undefined是一个有效的返回值。我们还是用之前提到的斐波纳契数列来做说明:
  var fibonacci = memoizer(function (recur, n) { return recur(n - 1) + recur(n - 2); }, {"0":0, "1":1});同样的,执行fibonacci(40)这个函数,只会对原有的函数调用40次,而不是夸张的331,160,280次。memoization对于那些有着严格定义的结果集的递归算法来说,简直是棒极了。然而,确实还有很多递归算法不适合使用memoization方法来进行优化。
  我在学校时的一位教授一直坚持认为,任何使用递归的情况,如果有需要,都可以使用迭代来代替。实际上,递归和迭代经常会被作为互相弥补的方法,尤其是在另外一种出问题的情况下。将递归算法转换为迭代算法的技术,也是和开发语言无关的。这对JavaScript来说是很重要的,因为很多东西在执行环境中是受到限制的(the importance in JavaScript is greater, though, because the resources of the execution environment are so restrictive.)。让我们回顾一个典型的递归算法,比如说归并排序,在JavaScript中实现这个算法需要下面的代码:
  function merge(left, right){ var result = []; while (left.length > 0 && right.length > 0){ if (left[0] < right[0]){ result.push(left.shift()); } else { result.push(right.shift()); } } return result.concat(left).concat(right);}//采用递归实现的归并排序算法function mergeSort(items){ if (items.length == 1) { return items; } var middle = Math.floor(items.length / 2), left = items.slice(0, middle), right = items.slice(middle); return merge(mergeSort(left), mergeSort(right));}调用mergeSort()函数处理一个数组,就可以返回经过排序的数组。注意每次调用mergeSort()函数,都会有两次递归调用。这个算法不可以使用memoization来进行优化,因为每个结果都只计算并使用一次,就算缓冲了结果也没有什么用。如果你使用mergeSort()函数来处理一个包含100个元素的数组,总共会有199次调用。1000个元素的数组将会执行1999次调用。在这种情况下,我们的解决方案是将递归算法转换为迭代算法,也就是说要引入一些循环(关于算法,可以参考这篇《List Processing: Sort Again, Naturally》)。

常用的javascript库

  jquery库、prototype

编辑本段版本历史

  
版本 发布日期 基于 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        

编辑本段版本标准

  JavaScript已经被Netscape公司提交给ECMA制定为标准,称之为ECMAScript,这个标准由ECMA组织发展和维护,标准编号ECMA-262。这个标准基于JavaScript (Netscape) 和JScript (Microsoft)。Netscape (Navigator 2.0) 的Brendan Eich 发明了这门语言,从1996 年开始,已经出现在所有的Netscape 和Microsoft 浏览器中。ECMA-262 的开发始于1996 年,在1997 年7 月,ECMA 会员大会采纳了它的首个版本。
  在1998 年,该标准成为了国际ISO 标准(ISO/IEC 16262)。这个标准仍然处于发展之中。在2005年12月,ECMA发布ECMA-357标准(ISO/IEC 22537)出台,主要增加对扩展标记语言XML的有效支持。目前最新版为ECMA-262 3rd Edition。符合该标准的实现有:
  1. Microsoft公司的JScript
  2. Mozilla的Javascript-C(C语言实现)
  3. SpiderMonkeyMozilla的Rhino(Java实现)
  4. Digital Mars公司的DMDScript
  5. 谷歌公司的V8WebKit
  目前ECMA-262 4th Edition正在开发的过程中,与其对应的JavaScript的版本为JavaScript 2.0,目前也正在开发过程中。

编辑本段历史沿革

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

编辑本段常见问题(FQA)

JavaScript是Java的变种吗

  JavaScript最初的确是受Java启发而开始设计的,而且设计的目的之一就是“看上去像Java”[2],因此语法上有很多类似之处,许多名称和命名规范也借自Java。但是实际上,JavaScript的主要设计原则源自Self和Scheme[3],它与Java本质上是不同的。它与Java名称上的近似,是当时网景为了营销考虑与Sun公司达成协议的结果。其实从本质上讲javascript更像是一门函数式编程语言.而非面向对象的语言,它使用一些智能的语法和语义来仿真高度复杂的行为。其对象模型极为灵活、开放和强大,具有全部的反射性。

JavaScript与JScript相同吗?

  为了取得技术优势,微软推出了JScript来迎战JavaScript的脚本语言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。

JavaScript是一门简单的语言吗?

  尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的编程语言来推广和宣传,但是JavaScript是一门具有非常丰富特性的语言,它有着和其他编程语言一样的复杂性,或更甚复杂。实际上,你必需对JavaScript有扎实的理解才能用它来撰写比较复杂的程序。
posted @ 2011-10-30 22:40  Lunaa  阅读(148)  评论(0编辑  收藏  举报