location.search会带着url后边的那个问号,比如http://www.yintai.com?url=10&conm=edd,那么location.search为?url=10&conm=edd
交换两个数的位置:
var a=5;
var b=12;
a=a+b;
b=a-b;
a=a-b;
alert('a:'+a);
alert('b:'+b);
ajax注意:
1、从服务器取过来都是字符串
eva('('+str+')');
new Function("return " + str);
2、不关心后缀,所有文件编码一致
在js中,如果你使用一个不存在变量,报错,如果你使用一个不存在的属性,是undefined
var a = 12;
function show(a) {
a = 5;
}
show(a);
alert(a);
-----------------
结果: 12
-------------------
var a = [1,2,3];
function show(a) {a = [2,3,4]}
show(a);
alert(a);
---------------
结果:[1,2,3];
分析:show(a); 相当于show( var a = a);第一个a是show方法里面的参数,第二个a是传过来的数组的引用,所以第一个a只是
得到了[1,2,3]的引用,在show里边,第一个a又被赋值了[2,3,4]的引用,就是第一个a的指向变了,但是全局变量a的指向还是[1,2,3];
------------------------
var a = [1,2,3];
function show(a) {a[0]="abc";}
show(a);
alert(a);
-------------------------
结果:['abc', 2, 3]
---------------------------
为什么玩正则?
方便、性能极高
function show(){
alert("show");
}
//高级浏览器
//obj.addEventListener(事件名,函数)
document.addEventListener("click",show,false);
document.onclick = show;
点击document会弹出两个show。
克隆节点:
obj.cloneNode(true/false);
true: 深度克隆 会把当前元素内的所有节点都复制
false: 浅克隆 只会复制当前元素
删除属性:obj.removeAttribute(属性名);
"事件"捕获:setCapture 把所有元素的事件都集中在一个元素上
特点: 1 ie独有
2 只能给元素添加捕获
3 只能给鼠标事件添加捕获 不能给键盘事件
ie:
oDiv.setCapture();
oDiv.releaseCapture();
oText.onkeydown = function(ev) {
var oEvent = ev || event;
if(oEvent.keyCode==13 && oEvent.ctrlKey && oEvent.shiftKey && oEvent.altKey) {
//同时按下回车,ctrl键,shift键及alt键就会进入if
alert("同时按下了回车,ctrl键,shift键, alt键");
}
}
----------------------------------
诡异事情:
1.
Function instanceof Object
Object instanceof Function
Function instanceof Function
Object instanceof Object
2.
alert(arr instanceof Array);
alert(Array instanceof Function);
alert(arr instanceof Function);
3.
Object.prototype.a=5;
var a=12;
alert(a instanceof Object);
包装类:
数字、字符串、布尔
数字-> new Number
字符串-> new String
布尔-> new Boolean
new Number(12)
检测对象具体类型:
instanceof: 检测自己父级,父级的父级...
constructor: 它的构造函数是谁,直接父级
请检测一个对象是否是json?
function isJson(arg){
return arg.constructor==Object;
}
typeof:检测类型
原型链:对象用到了一个方法,先找自身,再是自己的父级,再是父级的父级
*默认情况,所有的东西都属于Object
var oDate = new Date();
alert(typeof oDate); //object
alert(typeof Date); //function
严格模式:如何开启严格模式?
'use strict';
严格模式好处:
1. 修复了局部函数里面this
2. 定义变量必须加var
3. 不允许你在if、for等里面是定义函数
4. 干掉了with
严格模式作用范围:
1. 最大也冲不出script标签
2. 单个函数
3. 作用于整个js文件
*** 每个js文件开头一定要加 严格模式 'use strict';
严格模式兼容么?不兼容
this:当前发生事件的对象(元素)
当前的方法属于谁
好习惯:
1. 不用的东西删除 拖拽 jsonp
2. 尽量不使用全局变量
3. 能使用系统提供函数,坚决不自己写
4. 尽量使用正则操作字符串
作用域:
1. 全局变量:在哪里都能使用,生存周期长,直到浏览器关闭,占资源
2. 局部变量:只能在函数内部使用,生存周期极短,几乎不耗资源
3. 闭包:子函数可以使用父函数局部变量,如果子函数得不到释放,整条作用域链上面局部变量都会保留。
----------------------------------
function show(){
var a=12;
alert(a);
}
//函数调用之前 a 没有
show(); //中 a 有
//函数完毕 a 没有
----------------------------------
var a=12;
function show(){
alert(a);
}
//函数调用之前 a 有
show(); // 有
// 有
----------------------------------
function show(){
var a=12;
document.onclick=function(){
alert(a);
}
}
document.onclick=null;
// 之前 没有 a
show(); // 有a
// 完 有a
----------------------------------
function show(){
var a=12;
var b=5;
document.onclick=function(){
alert(b);
}
}
show();
----------------------------------
function aaa(){
var a=12;
function bbb(){
var b=5;
function ccc(){
var c=6;
document.onclick=function(){
var num=10;
alert(d);
}
}
ccc();
}
bbb();
}
aaa();
作用域链:子函数如果用一个变量,首先先找自己,自己的父级,父级的父级.....直到到全局,报错
(function(win){
})(window)
--------------------------------------
性能优化:
js -> 幻灯片
js -> html5 -> 游戏
项目:
1. 稳定性
2. 维护性
3. 性能
--------------------------------------
性能:
1. 网络性能
2. 执行性能(代码)
网络性能:
工具:
f12 -> network
name 资源名称
path 资源路径
method 请求方法
status 状态码
type 资源类型
主类型/次类型
text/html
text/css
image/jpeg
zns/json
initiator 发起人 (此资源是由谁引发)
size 资源大小
time 资源加载所需时间
timeline 时间线
total 总共耗时
stalled 卡 浏览器此时响应速度
DNS lookup 域名解析 DNS服务器问题
initial connection 浏览器连接数
request send 客户端网络带宽,发送数据过大
waiting 服务器配置,后台代码
Content Download 接收内容,服务器带宽
DNS: Domain Name System 域名解析
http://www.baidu.com/ -> IP地址
web服务器:
iis、apache、tomcat、nginx等
BWS/1.1 Tengine(concat) JDWS
link ref="index.css,news.css,list.css"
firefox -> firebug ->yslow
yslow: 给网站打分
人家优化建议,学习方向
chrome->audits
方法:
1. http请求越少越好
合并
css,js,图片等
index.css
news.css main.css
list.css
图片 -> css sprites
合并方法:
a). 手动
b). 工具
2. http请求越小越好
压缩 分号
css、js、图片
压缩方法:
a). 手动
b). 工具 yui compressor
http://tool.oschina.net/
3. 图片延迟加载
4. CDN -> 财务
CDN: Content Delivery NetWork 内容分发网络
5. 阻塞加载(同步加载):
非阻塞加载(并行加载、异步加载):
页面:
css,js,html,图片
css,html,图片 并行加载
js 阻塞加载
为什么js需要阻塞加载?
稳定
因为js阻塞加载,所以一般做法,把js放到body最后
<a href="javascript:;">连接</a>
<img src="1.1.png">
yslow: put css at top, put javascript at bottom
个人建议:
1. 外部的js文件,下载下来,然后放到body后面
2. 自己写的js文件,一定要放到head之间
split()中如果写的是字符串,它就认为你以字符串的形式分隔,如果写的是正则,那么就是以正则的形式分隔
split("\s") 它其实找的是s这个字符串,而不是空白
hack:
注意:先写标准的样式,再写hack(这样才能样式覆盖)
_或- IE6hack写法
+或* IE6/7
*+在一起表示仅IE7有效,比如*+html/body div{background:blue;}
如果写成*+div{background:blue}就没有效果