Skip to content


[转]《JavaScript权威指南》读书笔记

--------------------第一部分 javascript的核心-------------------- 第二章 词法结构 1、javascript使用Unicode字符集 2、大小写敏感 3、JS会忽略程序中记号之间的空格、制表符、换行符,除非它们是字符串或正则表达式直接量的一部分 4、单行注释//,多行注释/*……*/,注释不能嵌套。 第三章 数据类型和值 1、 五种基本类型:数字、文本字符串、布尔值、null(空)、undefined(未定义)。 三种引用类型:数组、函数、对象。对象分为:普通对象、专用对象(例如Date、Error、RegExp) 第四章 变量 1、js的变量是无类型的 2、变量的声明: var i;//声明 var i = 10; //声明+初始化 var i = 0, j = 0, k =0;//声明多个变量 3、重复声明:不会出错,重复声明作为一条负值语句 4、遗漏声明:未声明就赋值的变量会被隐式声明为全局变量,即使此变量在函数体内。 5、变量的作用域:分为全局变量和局部变量,没有级块作用域({}之间不是一个作用域)。 6、未定义的变量和未赋值的变量 未定义的变量指未声明(包括隐式声明)的变量,使用它会产生错误。未赋值的变量是声明了但没有赋值,会得到默认值undefined。 7、基本类型和引用类型:参考第二章1中内容,注意,字符串是基本类型,但它的传递确实引用传递。 8、无用存储单元的收集(GC) 9、全局变量是全局对象的变量,局部变量是调用对象的变量 第五章 表达式和运算符 1、最简单的表达式是直接量(值是本身)或变量名(值是变量所存放或引用的值)。表达式是简单表达式通过运算符的合并。 2、由于js中所有数字都是浮点型的,所以除法的结果也是浮点型的,eg:5/2=2.5;*/0=正无穷或负无穷;0/0=NaN 3、相等运算符(==)和等同运算符(===),(!==和!===道理一样) 第六章 语句 书121页6.20JavaScript语句小节。 第七章 函数 1、定义方法 function f(x, y) { return x * y; } var f = new Function(“x”, “y”, “return x*y”);//前n-1个字符串表示参数,最后一个字符串是函数主体 var f = function(x, y) { return x * y };//函数直接量,没有函数名 2、函数内部有一个Arguments的对象arguments,它包含实际传入此函数的参数信息。 function f(x,y,z){ var actual = arguments.length;//实际参数个数 var expected = arguments.callee.length;//方法名.length表示要求参数个数 return actual == expected; } alert(f(1,2,3)) 第八章 对象 1、对象的创建 var o = new Object(); var circle = { x:0, y:0, radius:2 };//对象直接量 2、属性的枚举(只列出用户定义的属性和方法(包括原型对象的属性和方法),不包含预定义的属性和方法),例子: var a = new Object(); a.num = 10; a.fun = function(){return 5;}; function display(obj){ var names = “”; for(var name in obj) names += name + “\n”; alert(names); } display(a); 3、未定义的属性是undefined,与数组一样。 4、原型对象和继承:用构造函数把对象的属性和方法初始化效率很低,因为每个此类对象都存一份这些的副本,更有效的方法是通过原型对象的方法声明方法和属性使对象共享这些。寻找方法或属性的方法是现在本对象找,找不到再去原型对象里找,直到Object。 javascript是以原型对象为基础的继承机制,而不是像java一样以类为基础的继承机制。 function Father(){} function Son(){} Father.prototype.name = “max”; Son.prototype = Father;//只能保证取道Father的变量和方法,无法取到Father.prototype的 Son.prototype = new Father();//可以取到Father.prototype的 document.write(Father.name);//不是max,因为不创建Father的对象的话,就只在Father里找,不会到他的prototype里找。 var father = new Father(); document.write(father.name);//是max 5、关联数组: object.property object.[“property”] 以上两种方式访问对象,后一种被称为关联数组(associative array) 第九章 数组 1、创建数组: var a = new Array(); var a = new Array(5, 4, 3, “test”);//数组为[5,4,3,”test”] var a = new Array(10);//10表示此数组有10个元素,每个都是undefined(未赋值的数组元素默认为undefined)。 数组直接量: var a = [2, “test”,[1,2]]//多维数组 2、数组是稀疏的(不连续) a[0] = 1; a[1000] = “test”; a.length = 3、数组的长度总是比最大元素的下标多一, var a = new Array(); a[1] = 2; a[1000] = 3; a.length = 1001;未定义的都为undefined 第十章 使用正则表达式的模式匹配 1、javascript1.2实现了Perl4正则表达式,javascript1.5实现了Perl1.5正则表达式的大型子集。 2、正则表达式可以实现模式匹配、文本检索、替换。 3、直接量字符P175,字符类P176,重复字符P177,选择分组引用字符P180,锚字符P181,标志P183,不支持的P183 第十一章 JavaScript的更多主题 1、自动数据类型转换P190。 2、数字到字符串转换: var s = String(number); var s = number + “”; 3、Function()构造函数和函数直接量的区别: 首先,构造函数Function()允许在运行时动态的创建和编译js代码,但函数直接量却是程序结构的一个静态部分,像function语句一样。 其次,作为上面的必然结构,每次调用Function()就会解析函数体并创建一个新的函数对象,如在循环中效率很低,而函数直接量不用每次重新编译,也不用创建对象。 再次,Function()创建的函数不使用词法作用域,而总是被当作顶级函数来编译。 eg: var y = “globle”; function func(){ var y = “local”; return new Function(“return y”); } alert(func());//输出“globle”对象:javascript中的对象可以作为关联数组使用,因为它们能够将任意的数值和任意的字符串关联起来。如果采用这种方式使用对象.那么要访问对象的属性就要采取不同的语法.即使用一个由中括号封闭起来的、包含所需属性名的字符串,例如: New Document 其中test[“name”]这种访问方式和test.name所起到的效果是一样的。 9、 对象直接量(也称为初始化对象) 是由一个列表构成的,这个列表的元素是用冒号分隔的属性/值对.元素之间用逗号隔开,整个列表封闭在大括号之内。例如:Var point={x:2.3,y:5.6},对象直接量也可以嵌套,如: Var rectangle={uppLeft:{x:2.3,y:5.6},lowerRight{x:4,y:7}},对象直接量并不一定是常量,也可以是表达式。 10、 Javascript不支持多位数组,不过它的数组元素还可以是数组。 11、 JavaScript的关链字null是一个特殊的值、它表示的是“无值”。null常常被看作是特殊 数据类型Null的唯—合法值。但有时它被看作对象类型的一个特殊值,即代表“无对象”的值。无论在哪种情况下。Null都是个唯一值、有别于所有其他的值。如果一个变量的值为null、那么你就应该知道它的值不是有效的对象、数组、数字、字符串和布尔值。 Undefined表示一个没有定义或者声明了没有赋值的变量或者属性。但是大多数实际使用中,可以将两者看作是相同的。如果对象my的prop属性并不存在,那么my.prop= =null这句话返回值为true。 如果要区分它们两个,那么可以使用typeof运算符,对于没有赋制的变量、没有定义的属性或者变量,返回值是undefined,看看下面的例子: Var temp; Type=typeof temp; //返回值为undefined 而对于null,返回值却是“object”,例: Type=typeof null; //返回值为object 有一种新的运算符“= = =”可以区分undefined和null,例如: Var temp; If(temp= = =null) //返回值为false 12、 Date对象:Date对象中,月份是从0开始的,所以12月份对应数字11,例如:声明2006年12月23日,new Date(2006,11,23);注意是11而不是12。 13、 正则表达式:在javascript语言中,正则表达式由RegExp对象来表示,语法上和Perl语言一样。一对斜线之间的文本就构成了正则表达式直接量。例如:\^Html\ 14、 变量:javascript中如果没有显式地声明一个变量,那么javascript会隐式为你声明。但是需要注意的是,隐式声明的变量总是全局变量,即使你只是在一个函数体内使用它。所以建议声明变量时,使用var。 15、 函数中声明的所有变量,无论是在那里声明的,在整个函数中它们都是有定义的。例如: Function test(o) { Var i=0; //在整个函数体内,i都是有意义 If(typeof= =”object”) { Var j=0; //j不仅在块中有定义,在整个函数也都有定义 For(var k=0;k

Posted in JavaScript/DOM/XML, 技术.


No Responses (yet)

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.