1.网站的性能优化?
http越少越好 (文件合并)
http越小越好 (文件压缩css,js,图片)
图片的延迟加载
使用CDN托管,理想的状态下(需要钱)
不需要的代码及时清理(比如定义的变量)
变量尽量使用局部的,少使用全局的(变量的冲突)
能使用系统的方法尽量不使用自己的方法
尽量使用正则操作字符串(速度很快)
DOM操作是昂贵的,能少操作就少操作
2.16毫秒是人眼最合适的动画时间;
设置一个盒子的动画: 获取盒子 –> 定义一个变量 –> 设置一个定时器 (16毫秒) –> left++;
oDiv.style.left = left + ‘px’; 赋值操作(较少操作DOM)
3.for循环的优化,把 var len = arr.length; var i=0;提出来,事实上没有减少,有时还会多;这个是理论可以优化性能.
4.获取时间的毫秒数: var time = Date.now() 等同于 getTime() : 时间戳
测试两个时间差就可以测试for循环的用了时间
5.嵌套循环优化: 外小内大(比如: 你建立的文件,文件夹里面包文件夹,外面小,里面多,就可以更加方便);
6.js的特点 : 跨平台 简单 弱语言 事件驱动 面向对象
7.es6块级作用域: 大括号包裹住的内容
8.let : 声明不提前 块级作用域
9.严格模式 : 变量一定要用var定义,不定义报错
在{} 里面定义的函数是一个局部的变量,只能在改{}里面使用
如果函数没人调用,就不在是window,而是undefined
10.包住错误,后期修改
try {
可能出现错误的代码
} catch (e) {
consoloe.log(1111) // 解决报错的,e是错误的信息
}
11.数据类型 : number string boolean undefined object function
null (空对象)
NaN : number 结果不是一个数字
NaN == NaN : false
13.Array最顶层是一个对象
14.数据类型的转换:
Number() parseInt() parseFloat()
转boolean : 0 ,false ,unedfined ,null , 空字符串
保留几位小数 : toFixed() 返回值是一个字符串
15.隐式转换 : 不由程序员自己转换 ( - )( == )
16.字符串和true或者false 比较,值都是false;
17.自增自减 : ++ –
a++ : 先赋值,再自增
++a : 先自增,后赋值
18. **求余操作**(%) : 结果看第一个数的符号
19.变量的问题,如果不用var 定义的是全局变量
function show () { var a = b = 10;}
show ();
alert(a) // 报错
alert(b) // 全局变量 (var a, b = 10 两个都是局部的变量)
20.回调函数 : 不由程序员调用的函数
21.只要用了回调函数,不会等函数执行完再执行下一行
22.封闭空间: (function (i) { 代码 })(i) 传过来的i值是局部的
23.封闭空间的作用: 解决i值的问题 解决变量的冲突 (;()(); 在前后加上括号,防止忘记写分号)
24.闭包: 子函数可以调用父函数的变量
25.作用域链 : 先从自己找 –> 上一层 –>… > 全局 –> 报错
禁止多层嵌套 : 内存的泄漏
(function () {})();
26.数组 : 栈 : push(返回值是长度) pop(返回值是删除元素) concat(新数组)
队列 :unshift(返回值长度) shift(删除的元素) indexOf() slice() reverse(翻转数组)
splice(a,b,c) : a下标 b:删除的个数 c添加的个数
27.在循环里面删除数组中的元素,删除以后应该i–;
28.sort排序方法
sort(function(n1,n2) {
return n1-n2; 从小到大
return n2-n1;
})
29.toString() :转换字符串,中间逗号隔开
join(’ ’ ) :数组转字符串,中间 隔开
30.冒泡 : 从第一个数据开始,和后面的所有数据对比,如果第一个大于后面的值,就调换位置
function bubbleSort (arr) {
for (var i=0; i< arr.length;i++) {
for (var j = i + 1; j < arr.length;j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr
}
31.
32.JSON对象 : {} 属性 方法
var obj = { name : ‘zd’,age:14}; var a = ‘name’(赋予变量) ,设置属性的时候需要中括号 obj[a] = ‘123’;
删除属性 : delete obj.name;
33.for in 循环
for ( var key in obj ) {}
34.对象的引用 : 深复制 和 浅复制 (复制对象的属性和方法)
浅复制 : 复制的是对象的内存地址,就是对像的引用
var json1 = { a;"1",b:'2'}
var json2 = json1
json2.a = 3;
改变json2,json1的a值也改变;(浅复制)
35.深复制 : 只复制属性和方法,不复制地址
var json1 = { a;"1",b:'2'}
var json2 = {};
for (var key in json1) {
json2[key] = json1[key];
}
json2.a = 2;
36.找出最多字符,字符的个数
var str = 'sdfsdsdfadsfsdagf';
var json = {};
for ( var i =0; i < str.length;i++){
var x = str.charAt(i);
if (json[x] == undefined) {
json[x] = 1;
} else {
json[x]++;
}
}
var char = '';
var max = 0;
for (var key in json ) {
if ( max < json[key]) {
max = json[key];
char = key;
}
}
原理 : 先设置一个空的对象, for循环str字符串,在循环里用一个变量接收根据下标获取元素,再判断对象的属性是否为undefined ,是的话设置对象的属性为1,反之对象的属性++;
定义一个空的字符串,和最大值设置为0; for of 循环 ,
判断 max 小于 对象的下标,max = json[key];char = key;