基础 
1、 只有函数有作用域 
2、 如果在<script src>的src 中设置了src特性,则script元素包含的任意代码就无效了。应该分开放到不同的script块中。 
3、 外部js脚本文件和页面内嵌的js代码的执行顺序是按它们在文档中的位置决定的,而不是先执行内嵌脚本,后执行外部脚本文件。 
4、 建议通过外部文件形式导入js文件。 
5、 使用接口技术解决js文件函数重名的冲突。问题是如果封装的接口也冲突了怎么办?定义接口的对象名也不能够相同,否则也会冲突。P46 这个例子没运行起来。 
6、 Js为css设置样式,是以html文件为参考的,而不用考虑js文件的具体位置,而css文件是以它本身位置为参考的。 
7、 浏览器是从上到下解析网页源码的。 
8、 接口的概念? 
9、 使用变量之前必须先声明。尽量少使用全局变量。 
10、 怎么区分构造函数、类和一般的函数?在命名时构造函数和类名建议首字母大写,而函数小写开头 
11、 使用alert和confirm进行手动调试

第四章 数据类型和变量 
1、 实词和虚词。实词指标识符、关键字保留字、直接量等。虚词指空白符、换行符、注释等无意义的字符。实词是区分大小写的。 
2、 Js只有三种数据类型:数值型(不区分浮点和整数,都是浮点型)、字符串型和数组型。null、undefined,number,string,Boolean是五种原始数据类型。 
object 
function是对象。是object的特殊情况。 
棧存储值类型,堆存储引用类型。 
3、 alert(Boolean(1));//返回的是true。书上返回的是13。有误 
alert((a = 1,2,3,4));//4 
alert(a=(1,2,3,4));//4 
alert(Boolean(1));//true 
a = 1,2,3,4; 
alert(a);//1 
   var a = 1,2,3,4; 
alert(a);//null 
4、 JS仅支持定义一维数组。不支持多维数组。但是可以模拟多维数组。但是性能不好。 
Var a = [[1,2,3],[4,5,6]];。数组可以放入不同的任意类型的数据,包括function和表达式。 
5、 函数在js中是第一种类型(基类,父类),其他类型继承于function。Object也是由Function来实现的。这点很NB啊。 
6、 函数如果没有返回值,责约定返回值是undefined。 
7、 函数是一个独立的作用域,只能通过函数返回值读取函数内部的数据。而构造函数是可以通过this.属性,获取函数内部的属性值。构造函数是定义对象的模板,就是类。 
8、 函数解析的机制:js解释器在预编译时就会把所有function语句声明的函数处理,如果存在同名函数,则后面的函数体会覆盖前面的函数体。而js解释器只是对var语句声明的变量名进行索引,变量的初始化值却被忽略,直到执行期才去为变量读取初始值。而对于function声明的函数体,js解释器不仅对函数盟按变量标识符进行索引,而且对于函数体也提前处理。 
第一:JavaScript时按<script></script>编译,并执行的。 
第二:JavaScript编译时完成对变量的声明,及函数处理。 
第三:JavaScript后声明的函数将会覆盖前声明的函数 
9、 处于同一个文档中的js教本,都属于同一个作用域:window。可以互相通信和调用。 
10、 Constructor属性。表示构造函数的属性值,用来检测数据类型。(10).constructor。返回number。 
Js习惯:先声明后读写,先赋值后运算。 
变量的作用域: 
1、 局部变量都比全局变量的优先权高 
2、 内部局部变量比外层局部变量优先权高 
3、 变量都是对象的属性。全局变量是window对象的属性。 
第五章 
Delete 
如果删除内部对象的预定义成员和客户端对象成员,使用var语句申明的变量也是不允许删除的。 
可以删除不存在的变量,返回true。 
Delete操作是彻底删除所占用的存储空间。

Void运算符的优先级、void的运算结果返回undefined。

第七章 
函数的作用域。 
function和Function构造函数的作用域是不同的。Funtion有顶级作用域。而function是局部的。

函数的解析机制 
Js解释器是一段段分析和执行程序的。在同一段代码中,function语句和函数直接量定义的函数结构总会被提取出来执行。只有当函数被解析和执行完毕之后,才会按顺序执行其它代码。但是Function构造函数定义的函数并非提前运行,而是在运行时动态地被执行。

函数的接收值个数没有限制。函数的返回值只能有一个。若要返回多个数据,则用数组存储。

函数的生命周期: 
使用function语句声明的函数被预先编译,此时如果存在相同的函数名,则会按顺序覆盖。而函数直接量和构造函数定义的函数都属于表达式函数,因此在代码按行执行时,才被激活生命周期。

函数的形参通过length属性来获取。

Arguments对象。参数管理器 
Arguments.length表示实参的个数。Arguments不是array对象,而是object对象,不能用for/in结构遍历。

可以通过arguments[i]下标动态改变实参的值。也可以通过修改length动态增大或减小实参的个数。

Arguments.Callee可以返回当前arugments对象所属的函数的引用,等价于函数名。Arguments.Callee.length表示函数形参的个数。

This关键字 
Undefined+undefined=NaN。多个undefined相加会返回NaN。 
函数作用域和实例化函数this的作用域是不同的。实例化只值向当前函数的作用域,而函数调用对象的作用域则是window。

函数属性的作用域: 
函数体外定于的属性可以任意的访问,可以在函数体内或外部访问,而函数内部定义的属性在初始化状态只能在函数体内部被调用。但若函数被调用后,则可以在外部访问函数内部定义的属性。若属性是函数,作用域也是一样的。

Call和apply。Apply传递的是数组。 
1、 Call和apply将函数转换成方法传递给某个对象,只是临时的,函数最终没有作为对象的方法存在,当函数被调用后,该对象方法会自动被注销。 
2、 Call和apply避免了资源浪费。

闭包:数据存储的一种方式。在动态环境中,数据实时变化,为了避免前面的数据丢失,js提供了闭包来寄存动态数据。 
特性: 
自闭特性。外界无法访问闭包结构内部的数据。 
包裹特性。

第八章 
定义抽象对象的方法是通过构造函数来实现的。 
Push()会添加新元素后返回数组长度。 
创建对象时,存储在变量中的只是引用指针,并不是对象本身。删除变量后,对象本身依然存在。 
Js的垃圾回收机制,自动收集无用存储单元,不需要专门销毁无用对象以释放内存。当对象没有被任何变量引用时,js会自动侦测并把所有废除的对象注销。 
当我们把对象的所有引用变量都设置为null时,可以强制对象处于废除状态。并被回收。

当删除对象属性后,不是将属性设为undefined,而是真正从内存清除掉。

对象的作用域: 
Js仅支持一种作用域,即公共作用域。对于js所有对象的所有属性和方法来说都是公开的。 
Js对象的结构封闭性不如函数结构。函数有自己的私有作用域。外界是无法访问的。

通过命名规则以区分私有作用域。O.x._a_=1;

静态对象:static 声明。Math和Global都是静态对象。 
Js不支持静态作用域。

构造对象:就是构造函数。如Object、Date、Function。构造对象的首字母要大写。 
构造对象不能直接被引用。必须使用new来实例化。 
alert(Point.name); //直接读取构造对象的属性 
alert(p1.name); //但是不能够通过实例对象来读取构造对象的属性 返回 undefined。这个name是构造对象在函数外定义的。如果是在函数内定义的则可以访问。 
对于构造对象的属性,实例对象是不能继承的,因此也不能够通过实例对象来读取构造对象的属性,反过来,构造对象也不能读取实例对象的属性。 
构造对象不能使用this关键字来读去实例对象的属性。 
function Point(x,y){ 
    this.x = x; 
    this.y = y; 
this.z = z; 

Point.name = "类属性"; 
Point.money = "1203"; 
Point.saying = function(){ 
    alert(this.length); //返回值2 

Point.saying(); 
var p = new Point(); 
alert(p.name);// 实例对象不能访问构造对象的属性。抛错。

function Point(x){ 
    this.x = x; 

Point.saying = function(){ //构造对象的方法 
    alert("类方法"); 

Point.saying(); //直接调用构造对象的方法

Point.saying = function(){ 
    alert(this.x);//不能通过this访问实例对象的属性 

Point.saying(); //直接调用构造对象的方法 返回undefined

实例对象 
实例对象的属性有两种: 
     第一种:从构造对象中继承过来的,这种属性每一个实力属性都有,但是他们拥有不同的副本。 
第二种:自己创建的,这种属性只有这个实例对象所独有。

原型对象 
就是构造函数的实例对象。它所包含的所有属性和方法能够供构造函数的所有实例共享。(类继承的实现),js叫原型继承。 
原型对象时在使用构造函数创建对象是同时实例化的一个对象,所有的对象都共同拥有这个对象的引用。 
通常我们在原型对象里面定义实例对象公用的方法,这样的好处是: 
     第一:所有的对象都共有这样一个方法实例,大大的节省的内存。 
第二: 当我们想修改对象的方法是,只用修改原型对象的方法既可以了,不用再麻烦的修改每一个实例的方法。 
如果原型属性和实例对象自定义的属性发生了命名冲突,则自定义的属性会“覆盖”原型属性的内容。这时由他的工作机制所决定的,但并不是真正的覆盖。如果我们删除这个属性,也是删除的实例的属性。 
当js解释器在检索属性时,会先检查对象实例是否定义该属性,没有,则会检查构造函数的原型对象是否具有这个属性。属性的继承只发生在读属性值时,而在写属性时不会发生。

构造器 
构造器是在Object类中定义的属性,该属性始终指向对象的构造函数。

对象的构造器属性是通过原型对象继承的,如果我们删除掉对象的原型,就可以看到他会自动查找到上一层的构造器属性。最终是要指向Ojbect的。

对于js内置对象来说,由于它们的原型是只读的,用户无法修改,所以可以使用constructor属性来判断内置对象的数据类型。

ToString ()、valueOf()方法。 
hasOwnProperty 用来检测一个对象的属性是继承属性,还是私有属性。但是注意:如果是一个对象的继承属性则会返回false,但是对于这个对象的原型对象来说则会返回true 
isPrototypeOf:判断一个对象的原形对象。函数的原型对象可以是Object.prototype,或者Function.prototype。

Global对象。是抽象类。JavaScript规定所有的对象和函数都不能独立存在,换句话说,所有的函数都必须是某个对象的方法, 所有的对象都必须是某个类的子类。

这就是全局对象,虽然是全局对象,但是global却没有方法调用全局的变量和方法。 这些方法却可以自己直接执行。

所以global有点像名誉zhuxi。没有实际的操控权利。 
Date对象: 
//获取本地系统的当前时间。 
var now = new Date(); 
alert(now); //返回当前时间对象,如"Wed Apr 29 15 :37: 55 UTC +0800 2009 "

//通过多选参数来创建指定的时间对象。此时,构造函数Date()的参数格式如下: 
new Date(year, month, day, hours, minutes, seconds, ms)

//除了前两个参数外(年和月)外,其他所有参数都是可选的,其中月数参数从0开始,如0表示第1个月,11表示第12个月。 
var d1 = new Date(2009,4,1); 
alert(d1); //返回时间对象,如"Fri May 1 00: 00:00 UTC+ 0800 2009" 
var d2 = new Date(2009,4,1,5,30,30); 
alert(d2); //返回时间对象,如"Fri May 1 00: 00:00 UTC+ 0800 2009"

//通过一个时间格式的字符串来创建指定的时间对象。此时,月份是从1开始,而不是从0开始。 
var d1 = new Date("2009/4/1 5:30:30"); 
alert(d1); //返回时间对象,如"Wed Apr 1 05 :30: 30 UTC +0800 2009"

//通过传递一个毫秒数来创建指定的时间对象。这个毫秒数是距离1970年1月1日午夜(GMT时间)的毫秒数。 
var d1 = new Date(1000000000000); 
alert(d1); //返回时间对象,如"Sun Sep 9 09 :46 :40 UTC +0800 2001"

第九章 数组 
数组的定义有两种方法: 
1.使用new关键字,传入参数。 
2.使用数组直接量,在中括号中添加元素。 
建议使用第二种方法因为效率高一些。 
Js的数组的长度可以任意伸缩,可以存储任意类型的数据内容。数组的下标可以不连续。Js在初始化数组时,只有真正存储在数组中的元素才能够被分配到内存中。 
数组中的元素可以自由定义,例如如果只定义1和100则在内存中实际额只存在这两个元素。 
所以在JavaScript中数组是否按顺序并不是那么重要。 
Array.length返回的不是数组存储值的实际个数,而是当前数组的最大元素的个数。 
数组和对象的一个区别就是:数组使用的是下标和具体的值相关联,而对象中则使用的是特定的字符串。 
交换两个变量 
var a = 10, b = 20; //变量初始化 
//var temp = a; //定义临时变量存储a 
//a = b; //把b的值赋值给a 
//b = temp; //把临时变量的值赋值给b 
a = [b, b = a ][0]; //通过数组快速交换数据 
定义数组的基本方法: 
   第一步: 定义函数名,通过一个或表达式首先判断如果存在则直接使用如果不存在则定义。 
   第二步: 将第一的函数名付给Object, 
Array.prototype._sum = Array.prototype.sum || //检测是否存在同名方法 
( Array.prototype.sum = function(){ //定义该方法 
    var _n = 0; //临时汇总变量 
    for(var i in this){ //遍历当前数组对象 
        if( this[i] = parseFloat( this[i] ) ) _n +=  this[i]; //如果数组元素是数字,则进行累加 
    }; 
    return _n; //返回累加的和 
}); 
Object.prototype.sum = Array.prototype._sum //把数组临时原型方法赋值给对象的原型方法sum()

var a = [1, 2, 3, 4, 5, 6, 7, 8, "9"]; //定义数组直接量 
alert( a.sum() ); //返回45

第十章字符串 
Js解释器采用了引用的方法实现对字符串的操作。字符串数据被存储到堆,然后把字符串的引用地址存储在字符串变量中。同时为了避免错误操作,js解释器强制约定字符串在堆存储的数据是不可变的。相当于设置字符串在堆区存储的数据是只读的。 
js对字符串的复制,传递操作,仅是简单的采用引用的方法,操作对象为堆区字符串的地址,即复制和传递地址。但是一旦编辑字符串本身的值,则js就会把堆区的字符串读取到棧区进行独立操作。 
字符串的比较是逐字节比较的。先把两个变量的字符串读取到栈区,然后逐字节比较,最后返回比较结果。 
字符串的操作是结合了值操作和引用操作的。当申明一个字符串时会把它的真实值存放在堆区,并且设定了堆区的内容是不可改变的,而在栈去存放堆区的地址。所以当进行复制和传递操作时只是进行了地址的传递,但是一旦要对字符串进行修改时则会复制一份放到栈区。实际是对栈区的内容进行改变,所以操作之后我们需要将这个值再次赋给引用,否则它会只是存放在栈区里,等待垃圾回收。 
对于字符串类型的语句或表达式,可以使用静态方法eval()来执行。 
var s = "alert('love')"; 
eval(s); 
var s = new String(); //创建一个空字符串对象,并赋值给变量s.object类型。 
var s = String( 123456 ); //包装字符串。String类型。 
var s = String( 1, 2, 3, 4, 5, 6 ); //带有多个参数,只处理第一个参数并把它转换为字符串返回。 
fromCharCode可以包含n个参数,参数代表字符的unicode编码。返回对应编码的字符的新字符串。 
var a = [35835, 32773, 24744, 22909], b = [];//声明一个字符编码的数组 
for( var i in a ){ //遍历数组 
    b.push( String.fromCharCode( a[i] ) ); //把每个字符编码都转换为字符串 

alert( b ); //返回字符串"读,者,您,好" 
alert( b.join( "" ) ); //返回字符串"读者您好"

第12章 BOM 
BOM:浏览器对象模型。Browser Object Model 
Bom对象包括:window,navigator,screen,history,location,document. 
Window代表根节点,其它对象是window的属性。它是全局作用域 
Window对象定义的3个人机交互方法:alert,confirm,prompt。

var url = "http://www.css8.cn/"; 
var features = "height=100, width=100, top=100, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no"; 
document.write('<a href="http://www.baidu.com/" target="newW" >切换到百度首页</a>'); 
var me = window.open (url, "newW", features); 
setTimeout(function(){ 
    me.close(); 
},30000);

使用write 方法时会覆盖掉前一个的内容。 
Location.search 捕获url查询字符串信息。 
第十三章 DOM 
window.onload = function(){ 
var tag = document.getElementsByTagName("ul")[0]; 
var a = tag.childNodes;//获取列表结果所包含的所有列表节点 
alert(a[0].nodeName);//显示第一个列表项的节点名称 
node.childNodes[0] = node.firstChild 
    node.childNodes[node.childNodes.length-1] = node.lastChild 

</script> 
<ul> 
    <li>D表示文档,DOM的物质基础</li> 
    <li>O表示对象,DOM的思想基础</li> 
    <li>M表示模型,DOM的方法基础</li> 
</ul>

DOM把元素之间的空格也当成文本节点。这在XML中是一样的。XML解析也是如此。 
NodeType=1表示的是元素节点。 
innerHTML返回元素包含的html信息内容。

第十四章 事件驱动模型 
个人认为类似于as的事件机制。有父子元素冒泡和捕获的概念。 
document.write('<script type="text/javascript">'); 写的js命令,必须放在<script></script>中。 
4种事件处理模型: 
1、0级 基本事件模型 
2、标准事件模型 
3、IE事件模型 
4、Nerscape4事件模型

JS不支持多线程。支持异步回调。类似于as的回调函数。一旦异步执行完,根据执行返回条件执行对应的回调函数。

Js的事件流机制:捕获型和冒泡型。三个阶段:捕获阶段、目标阶段、冒泡阶段。 
从IE6开始,html元素可以接受事件流。而这之前的版本是不行的。MOZILLA支持window对象。 
<script language="javascript" type="text/javascript"> 
function f(a){ 
    alert(a);//p点击时,FIREFOX的顺序是P,HTML,BODY。IE的顺序是P,BODY,HTML。 

</script> 
<html onclick="f('HTML')"> 
<body onclick="f('BODY')" bgcolor="#333333"> 
    <p onClick="f('P')">冒泡型事件</p> 
</body> 
</html>

DOM2.0支持冒泡型事件流和捕获型事件流。但是规定捕获型事件流先进行响应。默认情况下,事件采用冒泡事件流,不采用捕获事件流。在firefox可以显示设置是否使用捕获型事件流。

一般来说事件处理函数都会有返回值,如果我们设置返回值为false就可以禁止它的默认行为。例如阻止超链接,阻止表单提交数据。

Event.srcElement。表示当前事件的源。利用该属性可以捕获当前对象。但是DOM2不支持该属性。在firefox浏览器要使用event.target。

alert(event.srcElement);//firefox:undefined,IE: object.firefox和 DOM2不支持srcElement属性

<button id="btn">按    钮</button> 
<script language="javascript" type="text/javascript"> 
document.getElementById("btn").onclick = function(event){ 
    event = event || window.event; //兼容FF和IE浏览器的event参数模式 
    var src = event.srcElement || event.target; //捕获当前事件的对象句柄 
    alert(src.innerHTML); //显示当前对象所包含的HTML文本信息 

</script>

This对象 
通常情况下this等于事件源对象。 
<!-- 
通常情况下this等于事件源对象。 
--> 
<button id="btn" onClick="this.style.background='red';">按    钮</button> 
<script language="javascript" type="text/javascript"> 
function btn1(){ 
    this.style.background = "red"; //并非指向当前事件的目标对象.this指向window对象. 

function btn2(event){ 
    event = event || window.event; 
    var src = event.srcElement ? event.srcElement : event.target; 
    src.style.background = "red"; //指向当前事件的目标对象 

</script> 
<button onClick="btn1();">按 钮 1</button> 
<button onClick="btn2(event);">按 钮 2</button>

再看个例子 
<button id="btn1">按 钮 1</button> 
<button id="btn2">按 钮 2</button> 
<script language="javascript" type="text/javascript"> 
var b1 = document.getElementsByTagName("button")[0]; 
var b2 = document.getElementsByTagName("button")[1]; 
b1.f = function(){ 
    this.style.background = "red"; //并非指向按钮1 按钮1 点击指向的是window,按钮2点击指向的是btn2. 

b2.onclick = b1.f; 
</script>

b2.onclick = function(){ 
    b1.f(); //指向按钮1 
}

这是因为函数的作用域造成的。 
Js的函数总是运行在词法作用域中,即函数总是在定义它们的作用域中运行,而不在调用它们的作用域中运行。

元素的事件处理函数的作用域是独立的作用域,与局部作用域不同。 
Js在引用变量值时,会根据作用域从内到外,从下到上检索,作用域顶部是window对象。但是对于html元素的属性的事件处理函数,它的作用域顶部是元素目标调用对象。

addEventListener()和removeEventListener()。在事件处理函数内部,this总是指向当前元素。 
IE 7不支持DOM的addEventListener方法。

<p id="p">IE事件注册</p> 
<script language="javascript" type="text/javascript"> 
/* 
注销函数是不能够使用匿名函数,应为这样无法真正的删除这个绑定的函数。Firefox会把绑定和注销的两个结构相同的匿名函数视为不同函数。 
*/ 
var p = document.getElementById("p"); 
p.attachEvent("onclick", f); 
p.detachEvent("onclick", f); 
function f(){ 
    alert("p"); 

</script> 
addEventListener()和removeEventListener()的第三个参数是否捕获,必须一致。

var event = event || window.event; //标准化事件对象 如果存在event则使用event,不存在则使用window.event

loading事件机制 
<body onLoad="f1()"> 
<script language="javascript" type="text/javascript"> 
window.onload = f2; 
function f1(){ 
    alert('<body onload="f1()">'); 

function f2(){ 
    alert('window.onload = f2;'); 

</script> 
如果同时使用两种方式定义load事件类型,会使用window对象注册的事件处理函数覆盖掉body元素定义的页面初始化事件属性。

window.onload = f1; 
window.onload = f2; 
以上写法f1会被f2覆盖掉。 
window.addEventListener("load",f1,false); //为load添加事件处理函数 
window.addEventListener("load",f2,false); //为load添加事件处理函数 
这些写法就不会覆盖。两个监听都会执行。

DOMContentLoaded事件类型。 
Load事件需要等到所有图像全部载入完成之后才会被触发。而DOMContentLoaded事件会在页面结构加载完毕后就能执行。先于load事件。IE7 不支持。

Onunload 和Beforeunload事件类型。关闭窗口之前的事件处理函数。

第十五章  样式 
IE不支持DOM定义的style方法。 
DOM的style定义方法 
var box = document.getElementById("box"); 
box.style.setProperty("width","400px","");//第三个参数 priority表示是否为属性设置!important优先级命令。 
IE的style定义方法 
Box.style.width = “400px”;

看下面的例子: 
<style type="text/css"> 
#box { 
    width:100px; 
    height:100px; 
     
    border:solid 50px blue; 

</style> 
<div id="box"></div> 
<script language="javascript" type="text/javascript"> 
var box = document.getElementById("box"); 
alert(box.style.border);//返回空值。使用style样式无法访问样式表中的样式属性。css样式信息并非存储在 style属性中,而是存储在css 类中。 
</script> 
和 
<div id="box" style="width:100px; height:100px; border:solid 50px blue;"></div> 
<script language="javascript" type="text/javascript"> 
var box = document.getElementById("box"); 
alert(box.getAttribute("style")); 
</script>

要访问css类。可以使用document.styleSheet集合来实现。该集合包包含了文档中所有样式表的引用。如style 的link和import的外部样式表。和定义在本文档中的style样式。

DOM提供了cssRules集合,用来包含指定样式表中所有的样式。IE不支持。 
<script language="javascript" type="text/javascript"> 
var cssRules = document.styleSheets[0].cssRules || document.styleSheets[0].rules;//判断浏览器的类型,是否支持cssRules。 
alert(cssRules[0].style.border); //调用cssRules集合中的border属性 
</script>

CssRules或rules集合的style对象在调用css属性时,使用的是js样式属性,不能够使用连字符,如cssRules[0].style.backgroundColor 不行,而必须使用cssRules[0].style.background-Color

如果同时存在css外部样式表,又存在定义在文档中的样式属性。按照它们的位置排列styleSheets数组的索引位置。 
<link href="out.css" rel="stylesheet" type="text/css" media="all" />//styleSheets[0] 
//styleSheets[1] 
<style type="text/css"> 
#box { color:green; } 
.red { color:red; } 
.blue { color:blue; } 
</style>

每个css规则都包含有selectorText属性,获取指定样式的选择符。在IE中大写显示,Firefox小写显示。 
alert(cssRules[2].selectorText); 
alert(cssRules[2].style.color);

动态添加样式insertRule和addRule 
IE中支持addRule。FireFox支持insertRule 
if(styleSheets.insertRule){ //判断浏览器是否支持insertRule()方法 
//使用insertRule()方法在文档内部样式表中增加一个p标签选择符的样式,设置段落背景色为红色,字体颜色为白色,补白为一个字体大小。插入位置在样式表的末尾, 
   styleSheets.insertRule("p{color:#fff;padding:1em;}", index); 
}else{ //如果哦浏览器不支持insertRule()方法 
   styleSheets.addRule("P", "color:#fff;padding:1em;", index); 
}

addRule的Index表示样式插入的位置。默认是-1,表示在样式表末尾。 
insertRule的Index表示样式插入的位置。默认是0,表示在样式表末尾。必须设置。

访问最终样式 
IE: currentStyle对象,包含了所有元素的style对象定义的属性和任何未被覆盖的css规则的style属性。只有IE 支持。 
alert("背 景 色:"+p.currentStyle.backgroundColor+"\n字体颜色:"+p.currentStyle.color);

DOM提供了getComputedStyle()方法。该方法需要在document.defaultView对象中访问。 
var p = document.getElementsByTagName("p")[0];

alert("背 景 色:"+document.defaultView.getComputedStyle(p,null).backgroundColor+"\n字体颜色:"+document.defaultView.getComputedStyle(p,null).color);

offsetWidth表示元素在页面中的总宽度。 
offsetHeight表示元素在页面中的总高度。 
但是当为元素或者它的父元素定义了display:none,则offsetWidth和 offsetHeight都为0。

不同浏览器下获取style 
function getStyle(e, n) 

    if(e.style[n]) 
    { 
        return e.style[n]; 
    } 
    else if(e.currentStyle) 
    { 
        return e.currentStyle[n]; 
    } 
    else if(document.defaultView && document.defaultView.getComputedStyle) 
    { 
        n = n.replace(/([A-Z])/g, "-$1"); 
        n = n.toLowerCase(); 
        var s = document.defaultView.getComputedStyle(e, null); 
        if(s) return s.getPropertyValue(n); 
    } 
    else 
    return null; 
}

显示和隐藏元素 
css支持两种:visibility和display。 
Visibility: 会保持元素在文档流中的影响力,隐藏后元素的位置保持不变。属性包括visible和hidden。 
Display: 为none时,文档的结构会发生变化。被隐藏的元素及其子元素就被删除了。该元素不再占据文档位置。后面的元素会上移占据被删除的元素的位置。

透明度 :e.style.opacity = n / 100;

动画: 
var out = setInterval(f, 1000); //定义周期性执行的函数. 
clearTimeout(out); //则清除周期性调用函数 
setTimeout();//只能被执行一次。如果要循环执行,采用以下嵌套的方式。

var t = document.getElementsByTagName("input")[0]; 
var i = 1; 
function f(){ 
    var out = setTimeout( //定义延迟执行的方法 
    function(){ //延迟执行函数 
        t.value = i ++ ; //递加数字 
        f(); //调用包含setTimeout()方法的函数 
    }, 1000); //设置每秒执行一次调用 
    if(i > 10){ //如果超过10次,则清除执行,并弹出提示信息 
        clearTimeout(out); 
        alert("10秒钟已到"); 
    } 

f(); //调用函数

第十六章 COOKIE 
 有效期 expires属性 
 可见性 path domain属性 
 安全性 secure属性 
以上都是cookie属性,而不是js属性。 
Name:唯一的。不区分大小写。 
Value:cookie信息。不超过4KB 
Domain: 
Path: 有效访问路径。Path=/。表示cookie信息将会与服务器根目录下所有网页相关联 
Expires:失效日期 
Secure:boolean。True表示安全方式传递。

Cookie字符串是一对名值对。

Cookie的封装:

function cookie(name, value, options) 

    if (typeof value != 'undefined') 
    { 
        options = options || 
        { 
        } 
        ; 
        if (value === null) 
        { 
            value = ''; 
            options.expires = - 1; 
        } 
        var expires = ''; 
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) 
        { 
            var date; 
            if (typeof options.expires == 'number') 
            { 
                date = new Date(); 
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); 
            } 
            else 
            { 
                date = options.expires; 
            } 
            expires = '; expires=' + date.toUTCString(); 
        } 
        var path = options.path ? '; path=' + options.path : ''; 
        var domain = options.domain ? '; domain=' + options.domain : ''; 
        var secure = options.secure ? '; secure' : ''; 
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); 
    } 
    else 
    { 
        var cookieValue = null; 
        if (document.cookie && document.cookie != '') 
        { 
            var cookies = document.cookie.split(';'); 
            for (var i = 0; i < cookies.length; i ++ ) 
            { 
                var cookie = (cookies[i] || "").replace( /^\s+|\s+$/g, "" ); 
                if (cookie.substring(0, name.length + 1) == (name + '=')) 
                { 
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
                    break; 
                } 
            } 
        } 
        return cookieValue; 
    } 
}

第十七章 xml和json 
XML :区分元素节点和文本节点。属性节点。

推荐使用JSON。 
Json的数据结构基于对象和数组来构建。 
对象:名值对。{“string1”:”value1”, “string2”:”value2”} 
数组:

第十八章AJAX 
注意 :客户端和服务器端的编码要一致。 
JSON 异步通信协议 XMLHttpRequest 是 ajax异步交互的核心插件。和frame只能在同域中通信。 
JSONP : JSON with Padding。能够通过在当前文档中生成脚本标记(script),来调用垮域脚本时使用的约定。 
JSONP格式的数据就是把JSON数据作为参数传递给callback并传回。

ActiveXObject 
XMLHRttpRequest。 
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

第十九章 OOP 
Object,Function,Array,是内置的类。但是并不应该称为构造函数。我们在实例化的时候,会实例类的构造函数,但是类并不等于构造函数。

构造函数没有返回值,但是在js中构造函书可以返回一个对象值。构造函书内部并没有创造对象,而是使用this代替。This是新创建对象的引用指针。

原型模式 
当在构造函书中定义prototype属性后,任何实例化的对象都拥有prototype属性所定义的属性。而实例化的对象不能通过prototype属性定义原型。 
Js的内置对象都是构造函数结构体,因此都拥有prototype属性。

Prototype属性也是一个引用对象的指针,它值向一个隐形的对象,该对象存储着构造函书所有的原型属性。相当于基因库。一旦某个对象的属性被改动,则所有其他实例对象的属性也会变化。

构造函数属性和原型属性混合模式是ECMAScript的推荐标准。 
function Book(title,pages){ 
    this.title = title; 
    this.pages = pages; 
    Book.prototype.what = function(){ 
        alert(this.title +this.pages); 
    }; 
}

动态原型模式 
function Book(title,pages){ 
    this.title = title; 
    this.pages = pages; 
    if(typeof Book.isLock == "undefined"){ 
        Book.prototype.what = function(){ 
            alert(this.title +this.pages); 
        }; 
        Book.isLock = true; 
    } 
}

修改原型属性,所有实例的原型值都会发生改变。 
这章太复杂拉。可以单独写一本书出来了。

第20章 
函数是第一型。表示。

《javascript征途》学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. iOS 线程操作库 PromiseKit

    iOS 线程操作库 PromiseKit 官网:http://promisekit.org/ github:https://github.com/mxcl/PromiseKit/tree/master ...

  2. mysql表utf-8 字符串入库编码异常

    分析:http://www.myexception.cn/mysql/639943.html 解决方法:http://blog.sina.com.cn/s/blog_3f78232201011o26. ...

  3. model模块

    所谓的模块就是一个独立的文件,文件与文件之间是相互封闭的. //-----------------modeltest.js----------------- export var webName = ...

  4. jQuery中.html(“xxx”)和.append("xxx")的区别和不同

    append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...

  5. JDBC JdbcUtils( 本博多次出现的简陋工具类)

    package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;  ...

  6. 【CentOS6.5】安装nginx报错:No package nginx available. Error: Nothing to do

    今天在给centos6.5安装nginx时候,提示报错No package nginx available. Error: Nothing to do, 后来百度一下,说缺少EPEL(epel是社区强 ...

  7. 使用samba实现linux与windows文件共享

                       1,安装samba                              sudo apt-get install samba                 ...

  8. 复制Map对象:Map.putAll方法

    复制Map对象:Map.putAll方法 Map.putAll方法可以追加另一个Map对象到当前Map集合 package xmu.sxl; import java.util.HashMap; imp ...

  9. WebForm 页面ajax 请求后台页面 方法

    function ReturnOperation(InventoryID) { //入库 接口 if (confirm('你确认?')) { $.ajax({ type: "post&quo ...

  10. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...