JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。
对于JAVASCRIPT的学习,主要摘记如下:
1.JavaScript其实是ECMAScript的一种实现,而浏览器脚本语言的国际标准则是ECMAScript.(ECMA,European Computer Manufacturers Association).
但实际上JavaScript包括三大部分,即核心部分(ECMAScript),文档对象模型(DOM),浏览器对象模型(BOM).
2.<script> 标签用于定义客户端脚本,
属性TYPE指示脚本的 MIME 类型;
async规定异步执行脚本(仅适用于外部脚本);
charset规定在外部脚本文件中使用的字符编码;
defer规定是否对脚本执行进行延迟,直到页面加载为止;
language不赞成使用。规定脚本语言。请使用 type 属性代替它;
src规定外部脚本文件的 URL;
xml:space 规定是否保留代码中的空白。
3.CDATA 指的是不由 XML 解析器进行解析的文本数据。在标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待,CDATA的形式如下:<![CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
4.noscript 元素用来定义在脚本未被执行时的替代内容(文本)。此标签可被用于可识别 <script> 标签但无法支持其中的脚本的浏览器。
5.ECMAScript的基本概念:
5.1区分大小写,即变量名,函数名等区分大小写,且一般将有意义的单词的首字母大写。
5.2单行注释以“//”表示,块注释以“/×......*/"表示。
5.3语句以分号表示结束,若无分号,由解析器自动确定。
5.4变量为弱类型变量,即变量类型无强制要求,由”var"操作符声明,且为局部变量,若省略var操作符则为全局变量,但不建议省略。
5.5typeof操作符可以检测变量的数据类型,包括undefined,boolean,string,object(包括对象和null),function,nubmer.
5.6for-in语句的格式为for(var property in expression){statement}主要用来枚举对象的属性。
5.7label语句可以在代码中添加标签。格式为label:statement 主要与FOR语句结合使用。
5.8with语句是将代码的作用域设置到一个特定的对象中,格式为 with (expression) statement。
5.9函数格式为 function functionName(arg0,arg1,...argN){statements} 且参数的类型与数量与变量定义一样,为弱类型。但函数没有重载功能。
6.函数中的参数传递时,若为引用类型,则可以传递给外部,但若在函数内部定义变量,则对外部无影响了。即函数内部定义的是局部变量,可以认为是与外面无关的一个新的变量,仅仅是名称相同而已,且名称相同的变量中同一个作用域中以后面的赋值为主。当然,这也可以在一定程度上解释为函数的参数是按值传递的(实际上对于引用类型的参数,在同一个作用域中,应该是按照引用传递的,待考证)。
7.instanceof 用来检测引用类型是否为具体的类型?格式为result = variable instanceof constructor。
8.执行环境(execution context)定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个函数都有自己的执行环境。由于执行环境分为全局与局部两种,没有块级作用域,而局部仅仅指函数定义的作用域,故函数之外的都是全局作用域,因此,在IF等语句块中的变量等信息是全局性变量。
9.当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain),用于保证对执行环境有权访问的所有变量和函数的有序访问。
10.JavaScript没有块级作用域,故所有 变量的作用域都是当前的执行环境,而执行环境只有全局与局部(基本以函数定义为主)两种。而未明确声明的变量也是全局变量。
11.引用类型是一种数据结构,用于将数据和功能组织在一起。主要类型有Object,Array,Date,RegExp,Function,Boolean,Number,String,以及内置对象Global,Math.
11.1Object类型的创建方法有new操作符和字面量表示法两种。字面量时以大括弧标识。
11.2点表示法与方括号表示法都可以访问对象属性,但使用方括号时多以变量表示属性。
11.31Array类型的创建方法有new操作符和字面量表示法两种。字面量时以方括号标识。
11.4Array的方法包括toLocalString(),toString(),valueOf(),push(),pop(),shift(),unshift(),reverse(),sort(),concat(),slice(),splice().
11.5Date类型可以通过new操作符和Date构造函数进行创建,方法有Parse(),UTC(),toLocalString(),toString(),valueOf().
11.6RegExp类型用来支持正则表达式,也可以通过字面量定义或构造函数两种方式创建,一般格式为:var expression = / pattern /flags;方法有exec(),test().
11.7函数类型的定义为 function sum(num1,num2){statements},且函数实质为对象类型,函数名为指针,且没有重载功能。
11.8[function.]arguments.callee可选项 function 参数是当前正在执行的 Function 对象的名称。说明:callee 属性的初始值就是正被执行的 Function 对象。
11.9每个函数都包含两个属性,length,prototype.
12.正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
13.基本包装类型包括三类,即Boolean,Number,String.基本包装类型作为引用类型,是为了对基本类型进行一些对象类的操作,即赋予类型属性与方法。但与引用类型不同的是,基本包装类型的生存期不是执行环境的存续期,而是代码执行的瞬间。这也符合该语言弱变量类型的特征。但显式的创建则可以与引用类型一致。显式创建的格式为,var booleanObject = new Boolean(true);
14.Number包装类型的toFixed(n)方法会返回含有n个小数位的字符格式。toExponential()则返回指数表示法。toPrecision()表示返回合适的表示方法。
15.字符串的对象包装类型的方法主要有charAt(),charCodeAt(),concat(),slice(),substring(),substr(),indexOf(),lastIndexOf(),toLowerCase(),toLocaleLowerCase(),toUpperCase(),toLocaleUpperCase(),match().search(),replace(),htmlEscape(),split(),localeCompare(),fromCharCode().
16.内置对象是由ECMAScript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经 存在了。包括Global对象,Math对象.
17.Global对象是比较特别的一个对象,即不属于任何其他对象的属性和方法,最终都是它的属性和方法。主要方法包括isNaN(),isFinite(),parseInt(),parseFloat(),encodeURI(),encodeURIComponent(),eval().
18.Math对象的属性主要包括Math.E,LN10,LN2,LGO2E,LOG10E,PI,SQRT1_2,SQRT2.
Math对象的方法主要有Math.min(),max(),ceil(),floor(),round(),random(),abs(),exp(),log(),pow(),sqrt(),acos(),asin(),atan(),atan2(),cos(),sin(),tan().
19.JAVASCRIPT中的对象是指无序属性的集合,其属性可以包含基本值、对象或者函数。每个对象都是基于一个引用类型创建的。包括构造函数模式与原型模式。
20.函数与对象构造函数的区别一般可以NEW操作符的使用为标志。
21.原型模式的关键在于确定函数原型属性prototype,且定义的方法与属性是各个实例共享的。
22.hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中,只有对在于对象实例中时,返回true. 与hasPrototypeProperty()作用相反。
23.使用for-in循环时,返回的是所有能够通过对象访问的,可枚举的属性,即包括实例中的属性,也包括原型中的属性。
24.OO语言主要通过接口继承和实现继承两种方式支持继承,而JAVASCRIPT则仅支持实现继承。
25.所谓原型链即一个原型是另一个类型的实例,而另一个类型指向第三个类型的原型,层层递进则产生了原型链的概念。
26.instanceof与isPrototypeOf()可以用来确定原型和实例之间的关系,只是两者表示的含义不同,即A是B的实例,与B是A的原型。
27.借用构造函数的技术即在子类型构造函数的内部调用超类型构造函数,通过apply(),call()方法实现。
28.由于JAVASCRIPT中的执行环境以函数来定义局部执行环境,故匿名函数因此获得了闭包功能、定义模块作用域,及定义私有变量等功能。
29.BOM浏览器对象模型主要是指浏览器之间共有的对象,用于访问浏览器,但与网页内容无关。闭包是指有权访问另一个函数作用域中的变量的函数。利用闭包可以模仿块级作用域。
30.window对象是JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。因此,window对象的执行环境或作用域是全局。
31.在页面中,每个框架都有自己的window对象,因此,在HTML程序中,注意框架与JAVASCRIPT中的window对象的一一对应关系。另外,self对象与window对象可以互换使用。
32.var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;此语句可以先确定screenLeft属性是否存在,以便更改window对象的位置。
即screenLeft,screenTop 与screenX,screenY都可以表示window对象的位置,但不同的浏览器支持不同的属性的。
33.window 的其他属性有:innerWidth,innerHeight,outerWidth,outerHeight,document.body.clientWidth, document.body.clientHeight。方法有:moveTo(x,x),moveBy(x,x),resizeTo(),resizeBy(),open(),close()。
34.window.oper()的返回值如果是 null,则表示该窗口为浏览器内置的屏蔽程序阻止的。如果是抛出错误,则是浏览器扩展或其他程序阻止的。
35.window.setTimeout()方法表示要执行的代码中多少毫秒后执行,即超时调用,且该方法会返回一个数值ID,作为一个标识符。而clearTimeout(ID)可以取消超时。
36window.setInterval()表示要执行的代码间隔多少毫秒后重复执行,即间歇调用。同时该方法也返回一个ID,而clearInterval()可以取消间歇操作。
37.alert()方法接受一个字符串并将其显示给用户。confirm()方法让用户选择是否执行给定的操作。prompt()方法提示用户输入一些文本,并根据用户的选择决定是否返回用户输入的文本.