找回密码
 注册
搜索
热搜: java php web
查看: 1186|回复: 6

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

[复制链接]
发表于 2009-1-26 20:38:04 | 显示全部楼层 |阅读模式
[笔记]《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”
发表于 2009-1-26 21:03:18 | 显示全部楼层
还有第二部分么?
回复

使用道具 举报

发表于 2009-1-26 21:35:54 | 显示全部楼层
学习中,谢谢心得共享
回复

使用道具 举报

发表于 2009-1-26 21:40:26 | 显示全部楼层
读过这本书的

来说说,到底怎么样~1
回复

使用道具 举报

发表于 2009-1-26 21:40:33 | 显示全部楼层
本来想买一本的

但是看到好多书评都说不太好


不知真假

困惑,关键是贵
回复

使用道具 举报

发表于 2009-1-26 21:06:27 | 显示全部楼层
不错,谢谢共享.还在其它的吗?期待中~~~~
回复

使用道具 举报

发表于 2009-1-26 22:12:00 | 显示全部楼层
正在读这本书,觉得这本书内容很全,可是组织的不是太好,例子太少,读起来很吃力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-11-23 04:19

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表