【奥门永利误乐域】JavaScript语言精粹の笔记

<javaScript语言精粹>这本书写的很好,可以说句句是精华。这么薄的一本书讲JavaScript的特点介绍的非常清楚,是我对JavaScript的认识更加的深入。以前总觉得函数式编程很难理解,但是看了这本书以后我觉得对其有了一个新的认识。严格意义上说JavaScript并不仅仅是一门函数式编程语言,书中有一句话对它的特性做了一个精彩的描述:JavaScript的许多特性都借鉴自其他语言。语法借鉴自java,函数借鉴自Scheme,原型继承借鉴自Self,而JavaScript的正则表达式特性则借鉴自Perl。

JavaScript语言精粹

JavaScript的简单类型有:数字、字符串、布尔值、null值和undefined值。在JavaScript中,数组是对象,函数是对象,正则表达式是对象。可以使用对象字面量来创建一个新对象:
var empty_object = { };

章一  精华

每个对象都连接到一个原型对象,并继承其属性。使用typeof可以确定属性的类型。使用delete可以删除对象的属性。

Web浏览器语言;极强表达能力的语言;既轻量级又富有表现力;函数式编程(一等公民)。。。。。。

函数也是对象,其原型对象为Function.prototype.函数有一个call属性,当JavaScript调用函数时,可理解为调用该函数的call属性。函数有四种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式。这些模式主要是初始化关键字this存在差异,分别是:调用对象,全局对象,隐藏连接到该函数的prototype成员的新对象,apply方法的第一个参数。当函数被调用时,会得到一个arguments数组,可以通过它访问传递给该函数的所有参数。一个函数总是会返回一个值,如果没有制定返回值,则返回underfined.

 

JavaScript中的数组其实是一种伪数组。她把数组的下标转变成字符串,用其作为属性。可以通过数组字面量来声明一个数组:var
empty =
[];数组第一个值将获得属性名0,第二个属性名将获得属性名1,以此类推。

章二  语法

JavaScript中的正则表达式也是一个对象。正则表达式的分组有4中:捕获型,使用圆括号包括;非捕获型,使用(?:前缀;向前正向匹配,使用(?=前缀;向前负向匹配,使用(?!前缀。
 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

空白:可能表现为被格式化的字符或注释的形式,可以用来分隔字符序列;如var
that=this;var和that之间的空白是必须的。


 

注释://(推荐)、/* */

 

标识符:由一个字母开头,后面可以选择性地加上一个或多个字母、下划线、数字等;标识符不能使用关键字和保留字;标识符可用于语句、变量、参数、属性名、运算符和标记。

 

数字:JavaScript只有一个数字类型,在内部被表示为64位的浮点数。NaN是一个数值,表示一个不能产生正常结果的运算结果。数字拥有方法。JavaScript有一个对象Math,它包含一套作用于数字的方法,如Math.floor(number);

 

字符串:字符串字面量被包含在一对单引号或双引号中,它可能包含0个或多个字符。\表示转义字符。JavaScript没有字符类型,要表示一个字符,只需创建包含一个字符的字符串。转义字符表示那些正常情况下不被允许的字符插入到字符串中。

Ps:字符串是不可变的。一旦字符串被创建,就无法改变它。但可以通过字符串连接运算+连接其他字符来创建一个新字符串。两个包含着完全相同的字符且字符顺序也相同的字符串被认为是相同的字符串。

 

语句:语句通常从上到下被执行。JavaScript可以通过条件语句、循环语句、强制跳转语句和函数调用来改变执行序列。当var语句被用在函数内部时,它定义的是这个函数的私有变量。代码块是包在一对花括号中的一组语句。JavaScript中的代码块不会创建新的作用域,因此变量应该定义在函数的头部。

 

字面量:按指定规格创建新数组的表示法。

 

函数:函数字面量定义了函数值,可以有可选的名字,当然也可以匿名,用于递归的调用自己;可以指定参数列表,这些参数就像变量一样,在调用时由传递的实际参数初始化。函数的主体包括变量定义和语句。

 

章三  对象

 

JavaScript的简单数据类型:数字、字符串、布尔值、null、undefined;引用类型:对象。

Ps:数字、字符串、布尔值都是不可变的,拥有自己的方法,类似于对象。JavaScript中的对象是可变的键控集合。数组、函数、对象、正则表达式都是对象。对象是属性的容器,每个属性都拥有自己的名字和值。JavaScript中对象是无类型的,对新属性的名字和值没有限制。对象可以包含其他对象。

JavaScript包含一种原型链的特性,允许对象继承另一个对象的属性。正确地使用它可以减少对象初始化时消耗的时间和内存。

 

对象字面量:包围在一对花括号中的零或多个名/值对。对象是可以嵌套的。

 

检索:要检索对象里包含的值,可以采用在[]后缀中括住一个字符串表达式的方式。如果字符串表达式是一个字符串字面量,且是合法的JavaScript标识符,可以优先使用
. 表示法。

Ps:|| 可以用来填充默认值。

 

更新:对象里的值可以通过赋值语句来更新。

 

引用:对象通过引用来传递。

 

原型:每个对象都连接到一个原型对象,可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype。

Ps:当你创建对象时,可以选择某个对象作为它的原型。原型连接在更新时是不起作用的,当我们队某个对象做出改变时,不会触及该对象的原型。

Ps:原型连接只有在检索值的时候才被用到。如果我们尝试去获取对象的某个属性值,但该对象没有此属性名,那么JavaScript会试着从原型对象中获取对象的属性值。如果那个原型对象也没有,再从该原型对象的原型中寻找,直到找到该对象的属性值则停止,或者到达终点object.prototype。如果想要的属性不存在于原型链中,结果为undefined值。这个过程称为委托。

Ps:原型关系是一种动态的关系。如果添加一个新的属性到原型中,则该属性会立即对所有基于该原型创建的对象可见。

 

反射:检查对象,并确定对象有什么属性,然后检索该属性并验证取得的值。有两种方法可以处理掉这些不需要的属性。第一个是让你的程序做检查并丢弃值为函数的属性。另一个是使用hasOwnProperty方法,如果对象拥有独有的属性,将返回true。hasOwnProperty方法不会检查原型链。

 

枚举:for in用来遍历一个对象中的所有属性名。

Ps:常用的过滤器有hasOwnProperty方法,以及typeof排除函数。

 

删除:delete可以用来删除对象的属性。如果对象删除该属性,那么该属性就会删除。它会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透现出来。

 

减少全局变量的污染:将全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或库之间发生的可能性就会明显降低。

 

章四  函数

 

函数包含一组语句,它们是JavaScript的基础模块单元,用于代码复用、信息隐藏和组合调用。函数用于指定对象的行为。

 

函数对象:对象是名/值对的集合并拥有一个连接到原型对象的隐藏连接。对象字面量产生的对象连接到object.prototype。函数对象连接到Function.prototype。每个函数在创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。

每个函数在创建时都有一个prorotype属性。它的值是一个拥有constructor属性且值为该函数的对象。

函数可以保存在变量、对象和数组中。函数可以被当作参数传递给其他函数,函数也可以返回函数。因为函数是对象,所以函数也拥有方法。

 

函数字面量:包括四部分:保留字function;函数名;包围在圆括号里的一组参数;包围在花括号里的一组语句。

函数字面量可以出现在任何允许表达式出现的地方。函数也可以被定义在其他函数中。一个内部函数除了可以访问自己的参数和变量,也能访问其父函数的参数和变量。通过函数字面量创建的函数对象包含一个连到外部上下文的连接,这就是闭包。

奥门永利误乐域, 

调用:调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了函数声明时定义的形参,每个函数还接收两个附加的参数:this和arguments。This值取决于调用它的模式。JavaScript中有4种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。

调用运算符是跟在任何一个函数值的表达式之后的一对圆括号。圆括号内可以包含零个或多个逗号隔开的表达式。每个表达式产生一个参数值。每个参数值被赋予赋予函数声明时定义的形式参数名。当实际参数的个数与形式参数个数不匹配时,不会导致运行错误。

 

方法调用模式:当一个函数被保存为对象的一个属性时,将这个函数称之为方法。当一个方法被调用时,this被绑定到该对象上。如果调用包含一个提取属性的动作(点表达式或者下标表达式),即被当作一个方法来调用。

eg. Var myObject={

value:0,

increment:function(inc){

   this.value+=typeof inc===’number’?:1;

}

};

myObject.increment();

document.writeln(myObject.value);

方法可以使用this访问自己所属的对象。所以能够从对象中取值或者对对象进行修改。this到对象的绑定发生在调用的时候。通过this可以取得它们所属对象的上下文的方法称为公共方法。

 

函数调用模式:当一个函数不是一个对象的属性时,则该函数被当作一个函数来调用的。Var
sum=add(3,4); 以函数模式调用函数时,this被绑定到全局对象。

eg. myObject.double=function(){

var that=this;  
//解决内部函数调用时this仍指向绑定外部函数的this变量问题。

var helper=function(){

that.value=add(that.value,that.value);

};

Helper();

};

myObject.double();

document.writeln(myObject.value);

 

构造器调用模式:如果一个函数前面加上new来调用,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时,this会绑定到那个新对象上。new前缀会改变return语句的行为。一个函数,如果创建的目的是希望结合new前缀来调用,则它称为构造器函数。

eg. var Quo= function(){

     this.status=string;

};

Quo.prototype.get_status=function(){

  return this.status;

}

Var myQuo=new Quo(“confused”);

 

Apply调用模式:apply方法可以将数组参数传递给调用函数,接收两个参数,第一个是要绑定给this的值,第二个为一个参数数组。

Eg.

var array=[3,4];

Var sum=add.apply(null,array);

 

参数:当函数被调用时,会得到一个默认参数,即arguments数组。函数可以通过这个参数访问所有它调用时传递给它的参数列表,包括那些没有被分配给函数声明时定义的形式参数的多余参数。

Var sum=function(){

   var i,sum=0;

   for(i=0;i<arguments.length;i++){

发表评论

电子邮件地址不会被公开。 必填项已用*标注