原生js干货

来源:互联网 发布:手机80端口 编辑:程序博客网 时间:2024/06/05 02:44

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 = json1json2.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;