JAVASCRIPT学习摘记
来源:互联网 发布:如何查看域名的ns记录 编辑:程序博客网 时间:2024/09/21 11:22
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()方法提示用户输入一些文本,并根据用户的选择决定是否返回用户输入的文本.
38.location是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。包括属性hash,host,hostname,href,pathname,port.protocol,search. 常用方法如下:
38.1 location.assign()设置浏览器的位置。
38.2 replace()方法也可以改变浏览器的位置,但不会留下历史记录。
38.3 reload() 方法则以最有效的方式加载。
39.navigator是包含浏览器信息的BOM对象。属性包括:appCodeName,appName,appMinorVersion,appVersion,buildID,cookieEnabled,cpuClass,javaEnabled(),language,mimeType,onLine,opsProfile,oscpu,platform,plugins,preference(),product,productSub,register-ContentHandler(),register-ProtocolHandler(),securityPolicy,systemLanguage,taintEnabled().userAgent,userLanguage,userProfile,vendor,vendorSub.
40.screen对象用来表明客户端的能力。
41.history对象保存着用户上网的历史记录。拥有方法go(),back(),forward().
//定义对象EventUtil
var
EventUtil = {
/**
* 添加事件监听
* @param element html元素
* @param type 事件类型 例如 click,load
* @param handler 监听函数
*/
addHandler :
function
(element, type, handler) {
if
(element.addEventListener) {
element.addEventListener(type, handler,
false
);
}
else
if
(element.attachEvent) {
element.attachEvent(
"on"
+ type, handler);
}
else
{
element[
"on"
+ type] = handler;
}
},
/**
* 移除事件监听
* @param element html元素
* @param type 事件类型 例如 click,load
* @param handler 要移除的监听函数
*/
removeHandler :
function
(element, type, handler) {
if
(element.removeEventListener) {
element.removeEventListener(type, handler,
false
);
}
else
if
(element.detachEvent) {
element.detachEvent(
"on"
+ type, handler);
}
else
{
element[
"on"
+ type] =
null
;
}
},
/**
* 获取Event事件对象
*/
getEvent :
function
(event) {
return
event || window.event;
},
/**
* 获取事件源 例如 用鼠标点击页面上某个元素,即是获取被点击的元素
*/
getTarget :
function
(event) {
return
event.target || event.srcElement;
}
}
/**
* 获取style 风格
* @param el html元素
* @param style 具体的风格名称 比如width height
*/
var
getStyle =
function
(el, style) {
if
(el.currentStyle) {
style = style.replace(/\-(\w)/g,
function
(all, letter) {
return
letter.toUpperCase();
});
var
value = el.currentStyle[style];
return
value;
}
else
{
return
document.defaultView.getComputedStyle(el,
null
)
.getPropertyValue(style);
}
}
/**
* 显示或隐藏元素 如果元素是显示的则隐藏,如果是隐藏则显示
* @param element html元素
*/
var
toggleDisplay =
function
(element) {
var
display = getStyle(element,
"display"
);
if
(display ==
"none"
) {
element.style.display =
"block"
;
}
else
{
element.style.display =
"none"
;
}
}
58.2getData 通过 dataTransfer 或 clipboardData 对象从剪贴板获取指定格式的数据。
58.3setData 以指定格式给 dataTransfer 或 clipboardData 对象赋予数据。
DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法:
var doc = (new DOMParser()).parseFromString(text)
IE 不支持 DOMParser 对象。相反,它支持使用 Document.loadXML() 的 XML 解析。
XMLSerializer 对象使你能够把一个 XML 文档或 Node 对象转化或“序列化”为未解析的 XML 标记的一个字符串。
要使用一个 XMLSerializer,使用不带参数的构造函数实例化它,然后调用其 serializeToString() 方法:
var text = (new XMLSerializer()).serializeToString(element)
IE 不支持 XMLSerializer 对象。相反,它通过 Node 对象的 xml 属性使 XML 文本变为可用。
62.在DOM3级XPath规范定义的类型中,最重要的两个类型是XPathEvaluator和XPathResult.XPathEvaluator用于在特定的上下文中对XPath表达式求值,包括以下方法。
62.1 createExpression(expression,nsreaolver);将XPath表达式及相应的命名空间信息转换成一个XPathExpression,这是查询的编译版。多次使用同一个查询时很有用。
62.2 createNSResolver(node);根据node的命名空间信息创建一个新的 XPathNSResolver对象,在基于使用命名空间的XML文档求值时,需要使用 XPathNSResolver对象。
62.3 evaluate(expression,context,nsresolver,type,result);在给定的上下文中,基于特定的命名空间信息来对XPath表达式求值。剩下的参数指定如何返回结果。
63.selectSingleNode() 方法查找和 XPath 查询匹配的一个节点。
这个特定于 IE 的方法计算一个 XPath 表达式,使用这个节点作为 context 节点。它返回找到的第一个匹配节点,如果没有匹配的节点就返回 null。
这个 selectSingleNode() 方法只在 XML 文档节点上存在,在 HTML 文档中不存在。注意,既然 Document 对象是它们自己的节点,这个方法可以应用于整个 XML 文档。
64.selectNodes() 方法用一个 XPath 查询选择节点。这个特定于 IE 的方法计算一个 XPath 表达式,使用该节点作为查询的根节点,并且将结果作为一个 NodeList 返回。这个 selectNodes() 方法只用于 XML 文档节点,不用于 HTML 文档节点。
65.transformNode() 方法使用 XSLT 把一个节点转换为一个字符串。
这个特定于 IE 的方法根据一个 XSLT 样式表指定的规则来转换一个 Node 及其子孙,并将结果作为一个未解析的字符串返回。
这个 transformNode() 方法只在 XML 文档节点上存在,在 HTML 文档中不存在。
66.E4X(ECMAScript for XML)是一种在ECMAScript(见ECMA-262,包括ActionScript、JavaScript等语言实现)标准的基础上加入的动态XML支持的程序语言扩展。
xhr.open("get","test.txt",true);
/*第一个参数是请求方式,一般用get与post方法,与form标签的method类似
第二个参数是请求的URL
第三个参数是请求是同步进行还是异步进行,true表示异步
1>. responseText:作为响应主体被返回的文本
2>. responseXML:如果响应内容的类型是”text/xml”或”application/xml”,这个属性将保存包含着相应数据的XML文档
3>. status:响应的HTTP状态(200,404,500等)
4>. statusText:HTTP状态说明
74.柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
75.函数节流技术的主要思路是,通过一个定时器,阻断连续重复的函数调用。对于我们自己内部使用的函数,这通常意义不大,也不推荐使用这个技术,它可能会丢失对某些数据的处理。但是对于在用户界面调用的函数,却非常有意义。函数节流技术的意义在于在用户察觉范围外,降低函数调用的频率,从而提升性能。
76.JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求。 cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制,而并不是JavaScript本身的性质。cookie是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。
77.客户端存储---利用IE userData持久化数据。IE5及以上版本的浏览器是通过document元素后面附加一个专属“DHTML行为”来实现客户存储的。
旦给元素赋予了“userData“行为,该元素就拥有load()和save()方法。load()方法用于载入存储的数据。使用它的时候必须传递一个字符串作为参数----类似于一个文件名,该参数用来指定要载入的存储数据。当数据载入后,就可以通过该元素的属性来访问这些名、值对形式的数据,可以使用getAttribute()来查询这些数据。通过setAttribute()方法来设置属性,然后调用save()方法可以存储新的数据;removeAttribute()方法删除数据然后调用save()方法再保存一下。
- JavaScript学习摘记
- JAVASCRIPT学习摘记
- JavaScript学习摘记(自己编写对象)
- 学习摘记
- JavaScript学习摘记(Array对象的应用)
- JavaScript学习摘记(实现标题左右滚动效果)
- JavaScript的基础摘记
- perl学习摘记4
- 学习hash_map摘记
- Tuxedo学习摘记
- STL list学习摘记
- 批处理学习摘记
- openni学习摘记
- matlab学习摘记
- lib文件学习摘记
- 算法分析学习摘记
- CSS学习摘记
- 学习英语诀窍摘记
- Mac-Charles(青花瓷)抓包并篡改返回数据图文详解
- 搭mongodb+zookeeper+kafka环境
- 关于unity里pbr技术和材质 unity5默认shader和传统的对比
- .NET网页显示饼形图
- 自我理解一对多,多对多关系
- JAVASCRIPT学习摘记
- JDBC驱动
- arguments.callee
- SharedPreferences的最佳实践
- 一步一步教你反向传播的例子
- 全球主要城市列表数据、API
- JAVA程序中乱码处理
- hadoop配置文件参数详解
- (转载)如何开通 CloudFront 和 Route 53 ?