语句
if 语句:
if (condition1) statement1 else if statement2 else statement3
do-while语句 :后测试循环语句,循环体内代码至少会循环一次
do{ statement;}while (expression)
while语句:
while(expression){ statement;}
for语句:
for(initialization;expression;post-loop-expression) statement
for-in语句:可用来枚举对象
for (var propName in expression) expression
label语句:在代码中添加标签
label:statement
break和continue语句:
break语句会立即退出循环,强制继续执行循环后的语句;
continue会立即退出循环,但是退出循环后会从循环顶部继续执行;
可以和label语句联合使用;
with语句:
将代码的作用域设置到一个特定的对象中。
with(expression) statement;
switch语句:
switch(expression){
case value:station;
break;
case value:station;
break;
case value:station;
break;
default:statement
}
可以合并两种情况(case);
用全等操作符比较,不发生类型转换;
函数:
1.声明函数:
function functionName(arg0,arg1,......,argN){
statements
}
2.调用函数
functionName(arg0,arg1.........)
3.return
return实现返回值,return后的语句不会被执行,因为这个函数在执行return后退出;
return后不加任何值,返回undefined。
参数:
arguments对象与数组类似,可以用[]访问他的每一个元素,用length确定传入多少个参数;
命名的参数只提供便利,但不是必须的;
arguments对象可以和命名参数在一起使用;
arguments的值与对应的命名参数的值保持同步,内存空间独立;
arguments对象长度是由传入的参数个数决定的,而不是定义函数时的命名参数的个数决定的。
没有重载
如果ECMAscript中定义了两个名字相同的函数,该名字属于后定义的函数;
第四章 变量,作用域和内存问题
重点:基本类型和引用类型的值;执行环境;垃圾收集;
基本类型和引用类型的值
1.基本类型值:简单的数据段。基本数据类型按值访问,因为可以操作保存在变量中的实际值。
引用类型值:那些可能由多个值构成的对象。按引用访问。引用类型的值是保存在内存中的对象,js不允许直接访问内存中的位置,所以操作的对象是引用而不是实际值。
2.动态属性:
引用类型值,可以为对象添加属性和方法,或者改变和删除属性和方法。且只能动态的添加属性。
基本类型值不能添加属性方法
3.复制变量值
基本类型值:如果从一个变量向另一个变量复制基本类型值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。所以可以说新的值是一个副本,且两个变量完全独立。
引用类型值:
复制的是一个指针,而两个指针指向的是同一个对象,所以改变一个变量会影响另一个变量。
4.传递参数
函数的参数是按值传递的。
把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
基本类型值的传递:
function addTen(num){
num+=10;
return num;
}
var count=20;
var result=addTen(count);
alert(sount); //20
alert(result); //30
count作为参数被传入函数以后,数值20被复制给函数num,参数num的值被加10,参数num和变量count互不认识,只有相同的值。
引用类型值传递:
function setName(obj){
obj.name="Nike";
obj=new Object();
obj.name="Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nike"
原理:创建了一个新对象,保存在变量person中,person传入函数时,对象被复制给了obj,obj和person引用同一个对象,所以在函数内部obj改变,person也改变,person是全局对象。
而函数后两部,为obj保存了新的对象,obj和person就不指向一个对象了,所以person最后的值不是Greg。
执行环境与作用域
执行环境:定义了变量或者函数有权访问的其他数据,决定了他们各自的欣慰。分为全局和局部。
变量对象:环境中定义的所有变量和函数都保存在这个对象中。
2016/2/5
作用域链:用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,是当前执行的代码所在的环境的变量对象。全局环境始终的变量对象是作用域链中的最后一个对象。
标识符的解析是沿着作用域链一级一级的搜索标识符的过程,从前端开始,逐级向后回溯,知道找到标识符。
内部环境可以通过作用域链访问所有的外部环境,但是外部环境不能访问内部环境的任何变量和函数。
延长作用域链
try-catch语句的catch块;创建一个新的变量对象。
with语句;会将指定的对象添加到作用域链中。
两个语句都可以在作用域链前端添加一个变量对象。
没有块级作用域
if或者for语句中的变量,在语句执行完毕后,会将其变量添加到当前执行环境中。
用var声明的变量会被自动添加到最近的环境中,如果初始化变量时没有使用var声明,该变量就自动被添加到全局环境。
垃圾收集
垃圾收集 原理:找出那些不再继续使用的变量,然后释放其占用的内存。
方法:
标记清除,最常用。
引用计数。
第五章:引用类型
Object类型
Object类型适用于存储和传递数据。
创建方法:
1.var person= new Object(); person.name="Greg";person.age=29;
2.对象字面表示法:(向函数传递大量可选参数的首选方法)
var person={
name :"Greg",
age:29
}
访问对象属性方法
1.点表示法:person.name
2.方括号表示法:person["name"],当属性名中包含会导致语法错误的字符时,用这个方法。比如属性中含有空格。
可以通过变量访问属性。var propertyName="name";alert(person[propertyName])
不过,除非非要使用变量来访问属性,否则建议使用点表示法。
Array类型
数组是数据的有序数列,但是js数组的每一项都可以保存任何类型的数据。
创建数组
1.var colors= new Array(20); //20数组要保存的项目数量。
var colors=new Array("green","red","blue"); //数组中包含三个字符串值。
2数组字面量表示法:
var colors=["green","red","blue"]; //数组项用方括号表示。
读取数组:
基于0的数字索引:
显示第一项:alert(colors[0]);
修改第三项:colors[2]="black";
新增第四项:colors[3]="brown";
数组有length属性,可以读取数组项目数量,可以从数组末尾移除项或者向数组中新增项。
colors[colors.length]="black" //添加一种颜色。
检测数组
确定对象是不是数组:
1.if (value instanceof Array){
//操作
}
2.if (Array.isArray(value)){
//操作
}
转换方法,
toLocaleString()
toString()返回由数组中每个值的字符串形式拼接而成的一个以都好分隔的字符串
valueOf()
栈方法
栈:是一种可以限制插入和删除项的数据结构。栈是一种LIFO(后进先出)的数据结构,也就是最新添加的项被最早移除。而栈中项的插入(推入)和移出(弹出)只发生在栈的顶部。
push()方法,可以接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度。
pop()方法,从数组末尾移除最后一项,减少数组的length值,然后返回移出的项。
两个方法可以和数组其他方法连用。
队列方法
队列数据结构的访问规则是FIFO(先进先出),队列在列表的末端添加项,在列表前端移除项。
push()在末尾添加项
shift()移出数组中的第一个项,并返回该项。
unshift()在数组前端添加任意个项,返回新的数组长度。
重排序方法
reverse()反转数组项的顺序
sort()按升序排列数组项,会将数组项用toString()方法转型,比较的是字符串
操作方法
concat()创建当前数组的一个副本,然后将接收到的参数添加到副本末尾,最后返回新的数组。
slice()可以接受一或两个参数,即要返回项的起始和结束位置。如果只有一个参数,slice()返回从该参数指定位置开始到当前数组末尾的所以项。
splice()主要用途是在数组中部插入项,也可以用来删除,插入,替换任意数量的项。
2016/2/6