日期:2014-05-16  浏览次数:20316 次

javascript高级程序设计-笔记

1 var ntest = null ; alert(typeof ntest);typeof运算符对于null值会返回“object”。这个实际上是javascript最初实现中的一个错误,然后被ECMAScript沿用了。现在,null被认为是对象的占位符,从而解决了这一矛盾,但从技术上来说,它仍然是原始值。判断某个变量是否是某个对象的实例则要选择使用instanceof, alert(oString instanceof String).

?

2.值undefined并不等同于未定义的值。但是,typeof运算符并不真正区分这两种值。typeof对于声明未初始化的和未声明的都是返回undefined,但是对未声明变量除typeof之外的其他运算符的话,会引起错误。当函数无明确返回值时,返回的也是undefined。

?

3.Null类型:专用值null,即它的字面值。值undefined实际上是从值null派生过来的,因此ECMAScript把它们定义未相等的。尽管两个值相等,它们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null.

?

4.void运算符对任何值都返回undefined.该运算符通常用于避免输出不应该输出的值,例如,从html的<a>元素调用JavaScript函数时,要正确的做到这一点,函数不能返回有效的值,否则浏览器将清空页面,只显示函数的结果。例如:

<a href="javascipt:test(retun 'xxx')">test</a>

<a href="javascript:void(test(){return 'xxx'})">test</a>

没有返回值的函数真正返回的都是undefined

?

5.逻辑NOT运算符:如果运算数是undefined会发生错误。

?

6.top:最顶层的框架,即浏览器窗口自身。window另一个实例是parent。parent对象与装载文件的框架一起使用,要装载的文件也是框架集。如果页面上没有框架,window和self就等于top。

?

7opener:只在新窗口的最高层window对象才有opener属性,用top.opener更安全通过opener可以实现跨窗体之间的通讯,但是要保证是在同一域名下,使用时候可以加上document.domain=“”

?

8.reload()方法调用后的代码可能被执行,也可能不被执行,这由网络延迟和系统资源等因素决定。因此,最好把reload()调用放在最后一行。

?

9.load事件:在全部的页面载入之前,任何的DOM操作都不能发生。对于window对象可用两种方法定义onload事件处理函数。首先可用使用javascript直接将其分配给window对象:

<html>

<head>

<title>onload test</title>

<script type="text/javascript">

window.onload = function (){alert("load");}

</script>

</head>

<body></body>

</html>

?

第二种是在html中的body元素上分配:

?

<html>

<head><title>onload test</title></head>

<body onload="alert('load');"></body>

</html>

这里的问题是load事件实际是发生在窗口上,但在html中,没有任何代码可表示widown对象,所以HTML权威们就决定处理函数要在 <body />元素上分配,然后再后台放入window对象。所以定义在body上面的onload事件就是window.onload。那么能否给document.body.onload分配事件呢?当然可用。问题是,在页面还没有载入完<body>标签前,document.body是不存在的。这就意味着,如果尝试在<head>元素中分配事件处理函数,会报document.body未定义。

?

10.同源策略:javascript只能在同一个域中进行通讯。同源条件:协议相同,端口相同,域名相同。默认的状况下www.xiaoshenge.com,与app.xiaoshenge.com被认为域名不同,但是只要在每个子域的页面中加入一行document.domain设置即可,document.domain="xiaoshenge.com";

?

-----------------------------分界线----------------------------

javascript语言精粹与编程实践

?

“.”和“[ ]”都是对象成员存取运算符,所不同的是:前者右边的运算元

必须是一个标识符,后者中间的运算元可以是变量、直接量或表达式。“.”是

JavaScript 中唯一一个用“标识符”作为运算元的运算符。

由于“.”号要求运算元是标识符,因此对一些不满足标识符命名规则的

属性,就不可以使用“.”号。例如我们前面提到过的“abcd.def”、“1”和“.”

这些属性名。这种情况下就只能使用“[]”运算符