javascript权威指南第六版 学习笔记

来源:互联网 发布:焦作公务员网络 编辑:程序博客网 时间:2024/05/17 03:40


1、对象——继承

例子:

var o = {}; //从Object.prototype继承对象方法

o.x=1;

var p = inherit(o); //p继承o和Object.prototype

p.y=2;

var q = inherit(p); 

q.x + q.y //=>3 (分别继承自o和p)


2、避免属性访问报错采用如下写法

1)获取属性: var len = book && book.subtitle && book.subtitle.length; //利用了&&短路原理

2)防止变量为undefined或null:a = a || [];


3、“!=”可以区分undefined和null

4、函数调用

  1)实参数目 > 形参

采用arguments[X]来获取参数

  2)实参数目 < 形参

后面没有实参的形参设为undefined,其中arguments并不是真正的数组,而是以索引为属性,参数值作为属性值的对象,以及包括length属性

  3)callee和caller

      i:callee可以递归调用自身,如var f = function(x) {return callee(x-1;}

   4)当参数较多时忽略顺序调用

修改前: function  arraycope(from, from_start, to, to_start, length)

修改后:function easyCopy(args) {

                              arraycopy(args.from, args.from_start || 0, args.to, args.to_start || 0, args.length);

                }   

这样的话只要以key-value的形式出现就行了,类似map,不用记住参数的顺序


5、正则表达式

1)(?:...)只是组合,不记忆与该匹配的字符

2)\n 和第n个分组第一次匹配的字符相匹配,也就是从左边起第几个左括号,不包括(?:...)

3)先行断言: /javascript(?=\:) // =>可以匹配javascript:void()

4)负向断言:/java(?!script)/

5)修饰符

/i : 不区分大小写

/g : 全局

/m : 多行


6)使用RegExp

构造时传入的转义符“\”需要替换为"\\"


6、引入脚本

1)<script src="core.js">

config = {width:100, height:200}

</script>

这是一种将页面参数传入库文件的方法,在core.js执行时读取这段文本,然后动态执行一次,浏览器不会自动执行


2)<script defer async src="core.js" />

defer : 延时脚本执行,顺序保持一致

async : 异步执行,无序

如果两个都有的话,看浏览器怎么做,一般按照async执行,defer忽略



7、IE里的条件注释,只能用于html中,不能用于JavaScript中

<!--[if IE 6]>

IE6

<![endif]-->

<!--[if  lte IE 7]>

IE6/7

<![endif]-->

<!--[if ! IE]><-->

ie不会显示

<!--><![endif]-->



8、安全性

1)客户端js不能写入删除客户机上的文件或目录

2)只有鼠标点击这样的事件才会新开窗口

3)fileUpload控件的value为只读

4)跨站脚本

http://xxx.xxx.com?name=%3Cscript src=siteb/evil.js %3E%3C/script%3E

其中%3C为“<”的转义符,%3E为“>”的转义符,这就导致了引入了siteb的不可信js代码,类似这样的攻击称作XSS攻击

解决方法:

i:在使用不可信的数据来动态创建文档内容之前,从中移除html标签,一下代码去掉script左右括号

name = name.replace(/</g, "&lt;");.replace(/>/g, "&gt;");

ii:在html5中,iframe中定义了一个sandbox属性,自动禁用脚本


9、定时器

1)var timeout = setTimeout("func1()", 1000); 单次执行,timeout = clearTimeout(timeout);来取消函数执行,参数是setTimeout的返回值

2)var interval = setInterval("func1()", 1000); 循环执行,interval = clearInterval(interval); 来取消后继函数执行,参数是setInterval的返回值


原创粉丝点击