1.凡是在页面中使用id属性的元素,可以利用id值直接获取该标签对象。
2.DOM
html、xml都是dom
3.凡是在html标签中的onclick等属性中输入的代码
eg:<div onclick=" alert ( this ) "></div>
这些代码相当于一个匿名函数,在onclick上绑定了执行的结构
结果等价于:
div.onclick=function(){
alert(this)
}
4.事件
事件名:click
事件机制:浏览器的一种处理机制,在用户预先注册了事件处理函数以后,在用户触发了对应的事件行为的时候,浏览器会自发的调用已经注册的函数来响应用户的行为
事件处理函数:被绑定的函数,即:给onclick赋值的函数
事件响应:在用户出发的时候,浏览器自动的调用
5.浏览器的性能优化:
a.方法访问的优化
缩小获取某个元素的范围,
b.自定义算法与内置算法的优化
减少原型的搜索
利用缓存
c.访问搜索的优化
作用域搜索
6.错误类型
1>SyntaxError:表示eval()在解析代码的过程中发生了语法错误
2>ReferenceError:表示无效引用
3>TypeError:表示变量或者参数不属于有效类型
4>InternalError:js引擎内部错误的异常抛出
5>RangeError:数值变量或者参数超出了有效范围
6>URIError:给encodeURI()或decodeURI()传递的参数无效
7>evalError:eval出错
7.在js中程序的运行分为两个阶段:预解析和执行
1>在与解析的过程中出现的错误,多半是语法错误,这一类错误时无法处理的
2>只有在运行时出现的错误才可以被try-catch
throw new Error('错误的消息')
人为的抛出异常会组织其后的代码的执行,和内置的异常逻辑是一模一样的
异常的抛出顺序:
在异常发出的时候,首先会在当前函数中寻找是否有try-catch,如果发现已经处理了异常,就没有任何影响,如果没有出现try-catch,那么其后的代码不再执行,跳转到其调用函数, 检查是否出现 try-catch如果有, 则继续运行( 原函数中异常之后的代码, 还是不执行 )如果没有出现 try-catch, 则继续往上抛出. 直至全局范围, 再出现错误则爆红停止运行
<script> function foo1() { console.log( 'foo1 Start '); foo2(); console.log( 'foo1 finish '); } function foo2() { console.log( 'foo2 Start '); try { foo3(); } catch ( e ) { } console.log( 'foo2 finish '); } var err; function foo3() { console.log( 'foo3 Start '); // try { // // 抛出一个异常 // err = new Error( '我是一个自定义异常' ); // throw err; // } catch ( e ) { // console.log( e == err ); // } throw new Error( '我是一个自定义异常' ); console.log( 'foo3 finish '); } foo1(); console.log( 'over' ); </script>
什么时候使用 throw 抛出异常?????
1> 写一个函数是为了使用函数进行计算等运行. 因此需要输入数据, 而在实际开发中函数没有( 少用 )无效的函数.
一般函数的返回值是需要用来做其他事情的. 那么为了保证函数可以正常返回数据. 因此可以利用一次判断
限制函数传入的参数是否正确, 否则抛出异常, 让其后的代码不在执行.
例如: Person( name, age, gender )
function Person ( name, age, gender ) {
if ( typeof name == 'string' && typeof age == 'number' && typeof gender === 'string' ) {
throw new Error( '.... 参数不正确' );
}
// 其后的代码
}
2> 系统定义的内置异常不够使用的时候
在 js 中 try-catch 语法有 3 中( 知道即可 )
try-catch
try {
} catch ( e ) {
} finally { // 永远会执行
}
try {
} finally {
}
8.XSS脚本攻击
1>cross site script
2>cross css script
在获得用户数据的时候要输入判断信息
查询一个用户名和密码
'select * from tal where uid=\'' + uid + '\' and pwd = \'' + pwd + '\'';
如果用户输入的是
uid: admin
pwd: 123
'select * from tal where uid=\'' + 'admin' + '\' and pwd = \'' + '123' + '\'';
"select * from tal where uid='admin' and pwd = '123'";
SQL 的注入漏洞
如果用户输入的是
uid: ' or '1'='1' or '
pwd: 1234
"select * from tal where uid='" + uid + "' and pwd = '" + pwd + "'";
"select * from tal where uid='" + "' or '1'='1' or '" + "' and pwd = '" + 123 + "'";
"select * from tal where uid='' or '1'='1' or '' and pwd = '123'";
在html的输入框中将用户输入的内容进行转义。
1> 一般的处理办法就是将 > 和 < 进行转义, > <
function parse( str ) {
return str.replace( /(>)|(<)/g, function ( _, a, b ) {
if ( a ) {
// 匹配到的是 >
}
if ( b ) {
// 匹配到的是 <
}
})
}
2> 转换一门标记语言( BBS )
9. 随机数排序
代码的实现,在每次生成一个一个随机数以后数组就执行一次,内置的sort方法
10.
如果一个元素的样式是通过style属性设置的,那么在DOM操作中是可以直接获取的
* <div style="display:none"> document.getElementById(id).style.display;
* 如果一个元素的样式是通过style标签设置的,那么在DOM操作中不能直接获取
* <style>
*
* div{
* display:none;
* }
* </style>
* document.getElementById(id).style.display;是无法获取到里面属性的值
* 获取到的值是: 空
* 使用类样式的方式来解决