首页 > javascript > javascript权威指南读书笔记

javascript权威指南读书笔记

2010年2月22日

一直以来javascript都是我的弱项,虎年了,打算好好的学习一下js的相关知识。google了一下,很多朋友推荐《javascript权威指南》这本书,从今天开始,从头把js学习一下,看到第7章了,读书笔记如下:
1. 用for/in结构可以遍历一个对象的所有属性

2. 值NaN永远不会与其他任何值等同,包括它自身。要检测一个值是不是NaN,可以使用全局函数isNaN()

3. javascript核心语言内部通常先尝试valueof()转换、再尝试toString()转换,但对于Date类,则限制性toString()转换

4. 当字符串和数字进行比较的时候,会将字符串转化为数字,如果字符串不代表数字,将被转化为NaN,比较结果是false.

5. 所有大写字母小于所有的小写字母

6. in运算符左边是一个字符串,或者可以被转换为字符串,邮编的运算符是一个对象或者数组

[js]
var point = {x:1, y:1}; //定义一个对象
var has_x_coord = ‘x’ in point; //值为true
var has_y_coord = ‘y’ in point; //值为true
var has_z_coord = ‘z’ in point; //值为false;
var ts = ‘toString’ in point; //继承属性,值为true
[/js]

7. instanceof 运算符要求其左边的运算数是一个对象, 右边的运算数是对象的类名字。

[js]
var d = new Date();
d instanceof Date; //值为true;
d instanceof Object; //值为true, 所有对象都是Object类的实例
d instanceof Number; //值为false;d不是Number对象

var a = [1, 2, 3]; //用数组直接量的语法创建一个数组
a instanceof Array; //值为true, a是一个数组;
a instanceof Object; //值为true, 所有数组都是对象
a instanceof RegExp; //值为false;
[/js]

PS: 如果instanceof 左边运算数不是对象,或者右边的运算数是一个对象,而不是一个构造函数,则返回false;
如果右边运算数根本就不是对象,它将返回一个运行时错误。

8. 用delete删除属性、变量或者数组元素时,不只是把他们的值设置为undefined。当删除一个属性后,该属性将不存在。

9. js没有块级作用域

[js]
function test(o)
{
var i=0; //i在整个函数中有定义
if(typeof o == ‘object’)
{
var j = 0; //j到处有定义,不仅局限于这个代码块
for(var k=0; k <10; k++) //k到处有定义,不仅局限于该循环
{
document.write(k);
}
document.write(k); //k仍旧有定义,输出10
}
document.write(j); //j仍旧有定义,但没有被初始化
}
[/js]

再举一个例子:

[js]
var scope = ‘global’;
function f()
{
alert(scope); //显示undefined
var scope = ‘local’; //变量在此初始化,但到处有定义
alert(scope); //显示local
}
f();
[/js]

等同于:

[js]
var scope = ‘global’;
function f()
{
var scope;
alert(scope);
scope = ‘local’;
alert(scope);
}
[/js]

10. 在某些环境中,当进行对象到字符串的转换时,方法valueof()的优先级比方法toString()的优先级高。这样当一个类定义了valueof()方法时,如果想强制性的将那个类的对象转换成字符串,就必须明确的调用toString()方法。

11. js正则表达式中,选择项是从左到右考虑,知道发现了匹配项。如果左边的选择项匹配,就忽略右边的匹配项。因此,把模式/a|ab/应用到字符串”ab”上时,它只匹配第一个字符。

12. (?:…) 只组合。把项目组合到一个单元,但是不记忆与该组匹配的字符

13. (?=p) 正前向声明,要求接下来的字符都与模式p匹配,但是不包括匹配中的那些字符。/[Jj]ava([Ss]cript)?(?=\:)/这个模式与”JavaScript: The Definitive Guide”中的单字”JavaScript”匹配但是与”Java in a Nutshell”中的Java不匹配,因为其后没有冒号。

14. (?!p) 反前向声明,要求接下来的字符不予模式p匹配。
/Java(?!Script)[A-Z]\w*)/匹配的是”Java”后跟随一个大写字母和任意多个ASCII单字字符,但是不能跟随”Script”。它与”JavaBeans”匹配,不与”Javanese”匹配,与”JavaScrip”匹配,但不与”JavaScript”或”JavaScripter”匹配。

15. 把一个值转换成字符串:var x_as_string = x + ”; 也可以使用x.toString()来转换;把一个值强制转换成数字:var x_as_number = x – 0; 也可以使用parseInt或parseFloat;要把一个值强制转换成布尔值: var x_as_boolean = !!x;

16. 使用构造函数Function()创建的函数不使用词法作用域,相反的,它们总是被当做顶级函数来编译

[js]
var y = ‘global’;
function constructFunction()
{
var y = ‘local’;
return new Function("return y"); //不捕捉局部作用域
}
//这段代码将显示"global",因为Function()构造函数返回的函数并不使用局部作用域
//假如使用一个函数直接量,这段代码则可能显示local。
alert(construnctFunction()());显示global
[/js]

17. HTML解析器不理解javascript代码, 如果它看到代码中的”</script>”字符串,即使</script>表记出现在引号中,HTML解析器也会认为它发现了当前运行的脚本的结束标记。

18. 如果想用javascript:URL 执行某些不改变当前显示的文档的javascript代码,必须确保URL中的最后一条语句没有返回值。一种方法是用void运算符显示地把返回值指定为undefined, 只需要在javascript:URL的结尾使用语句void 0;即可。
eg: javascript:window.open(“about:blank”); void 0; 这句将打开一个新的空浏览器窗口,而不改变当前窗口的内容。

19. window对象的属性:
closed : 一个布尔值, 只有当窗口被关闭时,它才为true。
defaultStatus, status : 在浏览器状态栏中显示的文本。
document: 对Document对象的引用,该对象代表在窗口中显示的HTML文档。
framses[] : Windows对象的数组,代表窗口中的各个框架(如果存在的话)。
history : 对History对象的引用,该对象代表用户浏览窗口的历史。
location: 对Location对象的引用,该对象代表在窗口中显示的文档的URL。设置这个属性会引发浏览器转载一个新文档
name : 窗口的名称。可被HTML表记<a>的target性质使用。
opener : 对打开当前窗口的Window对象的引用。如果当前窗口被用户打开,则它的值为NULL
parent : 如果当前的窗口时框架,它就是对窗口中包含这个框架的引用。
self :  自引用属性,是对当前Window对象的引用,与window属性同义。
top : 如果当前窗口时框架,它就是对包含这个框架的顶级窗口的window对象的引用。注意,对于嵌套在其他框架中的框架,top不等于parent。
window : 自引用属性,是对当前window对象的引用,与self属性同义。
alert() : 弹窗提示
confirm()、prompt() : 用于获取用户的响应。
close() : 关闭窗口。
focus(), blur() : 请求放弃窗口的键盘焦点。 focus() 方法还通过把窗口提到堆栈书序的最前面,从而保证窗口可见。
moveBy(), moveTo() : 移动窗口
open() : 打开新的顶级窗口、使用指定的特性显示指定的URL。
print() : 打印窗口或框架中的内容,就像用户点击了窗口工具栏中的Print按钮一样。
resizeBy(), resizeTo() : 调整窗口的大小。
scrollBy(), scrollTo() : 滚动窗口中显示的文档。
setInterval(), clearInterval() : 设置或取消重复调用的函数,该函数在两次调用之间有指定的延迟。
setTimeout(), clearTimeout() : 设置或者取消在指定的若干毫秒后腰调用一次的函数。

20. 如果不想让Javascript的错误消息打扰用户,可以在所有javascript程序的开头使用如下代码:
self.onerror = function(){return true};

21. Navigator 对象的属性:
appName : Web浏览器的简单名称。
appVersion : 浏览器的版本号或其他版本信息。注意,者因该是被视为”内部”版本号。
userAgent : 浏览器在它的URSE-AGENT HTTP标题中发送的字符串。这个字符串通常包括appName和appVersion的所有信息。
appCodeName : 浏览器的代码名, 如”Mozilla”。
platform : 运行浏览器的硬件平台。

22. 在大多数的情况下,document.location和location.href是相同的。但是,当存在服务器重定向时,document.location包含的是已经装在的URL, 而location.href包含的则是原始请求的文档的URL。

23. document的属性:
linkColor 未被访问过的链接的颜色
vlinkColor 被访问过的链接的正常颜色
alinkColor 被激活的链接(即用户点击了该链接)的颜色。

anchors[] Anchor对象的一个数组,该对象代表文档中的锚

applets[] Applet对象的一个数组,该对象代表文档中的Java小程序

bgColor 文档的北京色
fgColor 文本的颜色

cookie 允许Javascript程序读写HTTP cookie。

domain 该属性使处于同一Internet域中的相互信任的Web服务器在网页间级啊农户时能协同地放松某项安全性限制。

forms[] Form对象的一个数组,该对象代表文档中的

元素。

images[] Image对象的一个数组,该对象代表文档中的元素。

lastModified 一个字符串,包含文档的修改日期。

links[] Link对象的一个数组,该对象代表文档中的超文本链接的对象。

location 等驾驭属性URL,其使用是遭反对的

referrer 文档的URL,包含把浏览器带到当前文档的链接(如果存在这样的链接)。

title 位于文档表记之间的文本。

URL 一个字符串。声明装在文档的URL。除非发生了服务器重定向,否则该属性的值域Window的属性location.href相同。

24.一个文档绝不应该从时间处理程序中调用它自己的write()方法。

25. 除了bgColor属性,Document对象的其他颜色属性只影响表记的性质,基本上没有其他作用

26. javascript预载图片:
[js]
<script>
//创建一个平外图像、并预载翻转图像
//注意,我们从不用屏外图像做任何事情,尤其不会把平外Image对象付给文档的images[]数组。
(new Images(80,20)).src = ‘images/help_rollover.gif’;
</script>
<a href = ‘help.html’
on mouseover = "document.helpimage.src=’images/help_rollover.gif’;"
on mouseout = "document.helpimage.src=’images/help.gif’;">
<img name="helpimage" src="images/help.gif" width="80" height="20" border="0">
</a>
[/js]
这样,第一次鼠标移动到图片上时,实现翻转就不会有延时了

27. 表单form中FileUpload元素的value属性是制度的,这可以组织而已的js程序欺骗用户

28. javascript的cookie操作中,expires属性对应的date采用的日期规范应该是Date.toGMTString()
[js]
//eg.
document.cookie = "version="+document.lastModified+";"expires="+somedate.toGMTString();
[/js]

作者: 石巍
原载: 10V
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/javascript-notebook.html

本文的评论功能被关闭了.