JavaScript高级程序笔记2

语句

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






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容