JavaScript原生系列-总结篇(一)

转载请注明预见才能遇见的博客:http://my.csdn.net/

原文地址:https://mp.csdn.net/postedit/100654006

JavaScript原生系列-总结篇(一)

目录

JavaScript原生系列-总结篇(一)

1.window.onload、οnlοad=""和$(document).ready()的区别

2.数组去重

(1)使用ES6数据结构Set 和 ES6 Array.from()

(2)使用push 和 indexOf

(3)排序去除相邻重复元素

3.事件委托(事件代理)、事件捕获、事件冒泡

4.判断变量类型

5.同步和异步(简要阐述)

6.返回false的几种情况

7.js数据在内存中的存储

8.闭包

9.this的指向

10.new具体做了些什么

11.原型和原型链

12.继承方式

13.数组常用方法

14.数据存储


1.window.onload、οnlοad=""和$(document).ready()的区别

window.onload是在页面中包含图片在内的所有元素全部加载完成再执行,多次会覆盖;【JQ】$(document).ready()是DOM树加载完成之后执行,不包含图片,其他媒体文件;一般$(document).ready()快于window.onload执行,代码少的情况下执行顺序是不确定的。<body οnlοad="meathName1();meathName2();">在body加载完成执行,在window和dom之后执行,总是最后执行,这里的函数会覆盖window.onload,但是meathName2不会覆盖meathName1。

详细资料: https://blog.csdn.net/pcaxb/article/details/100661841

2.数组去重

(1)使用ES6数据结构Set 和 ES6 Array.from()

let arr = ['a','bb','22','a','yuci','haha','22'];
let setArr = new Set(arr);
console.log(setArr);
arr = Array.from(setArr);
console.log(arr);

Array.from()扩展, 将类数组转换成数组参考

(2)使用push 和 indexOf

let arr = ['a','bb','22','a','yuci','haha','22'],
arrCenter = [];

for (const index in arr) {
    let item = arr[index];
    if(arrCenter.indexOf(item) == -1){
      arrCenter.push(item);  
    }
}
console.log(arrCenter);

如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组

let arr = ['a','bb','22','a','yuci','haha','22','cc'],
arrCenter = [];

for (const index in arr) {
    let item = arr[index];
    //0 1 2 0 4 5 2 7 
    // console.log(arr.indexOf(item));
    if(arr.indexOf(item) == index){
      arrCenter.push(item);  
    }
}
console.log(arrCenter);

(3)排序去除相邻重复元素

let arr = ['a','bb','22','a','yuci','haha','22','cc'],
arrCenter = [];
arr = arr.sort();//["22", "22", "a", "a", "bb", "cc", "haha", "yuci"]

for (let index in arr) {
    //index 是字符串
    let item = arr[index];
    if(item != arr[parseInt(index)+1]){
      arrCenter.push(item);  
    }
}
console.log(arrCenter);

3.事件委托(事件代理)、事件捕获、事件冒泡

事件委托(事件代理):事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

事件捕获:当一个事件触发后,从Window对象触发,不断经过下级节点,直到目标节点。在事件到达目标节点之前的过程就是捕获阶段。所有经过的节点,都会触发对应的事件

事件冒泡:当事件到达目标节点后,会沿着捕获阶段的路线原路返回。同样,所有经过的节点,都会触发对应的事件

//事件冒泡 
window.addEventListener("click",()=>console.log("window"));
document.addEventListener("click",()=>console.log("document"));
document.body.addEventListener("click",()=>console.log("body"));
document.getElementById("div01").addEventListener("click",()=>console.log("div01"));

//事件捕获
window.addEventListener("click",()=>console.log("window"),true);
document.addEventListener("click",()=>console.log("document"),true);
document.body.addEventListener("click",()=>console.log("body"),true);
document.getElementById("div01").addEventListener("click",()=>console.log("div01"),true);

参考资料:https://blog.csdn.net/pcaxb/article/details/100665670

4.判断变量类型

typeof()用于判断简单数据;

判断一个变量是对象还是数组使用instanceof,constructor或Object.prototype.toString.call();

参考资料:https://blog.csdn.net/pcaxb/article/details/101020581

 

5.同步和异步(简要阐述)

同步:由于js单线程,同步任务都在主线程上排队执行,前面任务没执行完成,后面的任务会一直等待;

异步:不进入主线程,进入任务队列,等待主线程任务执行完成,开始执行。最基础的异步操作setTimeout和setInterval,等待主线程任务执行完,在开始执行里面的函数;

参考资料:http://www.ruanyifeng.com/blog/2014/10/event-loop.html

 

6.返回false的几种情况

除了"",0,false,null,undefined,NaN返回false,其他全部返回true(包括空对象,空数组)

参考资料:https://blog.csdn.net/pcaxb/article/details/101020581

 

7.js数据在内存中的存储

存储方式:

简单数据类型:存储在栈中;

引用数据类型:存储在堆中,在栈中存储了指针,指向存储在堆中的地址,解释器会先检索在栈中的地址,从堆中获得实体;

内存占用大小:

简单数据类型:大小固定,占用空间小,频繁使用,所以存储在栈中;

引用数据类型:大小不固定,占用空间大;
 

8.闭包

何为闭包:有权访问另一个作用域中变量的函数

闭包特性:可实现函数外访问函数内变量,外层变量可以不被垃圾回收机制回收

for(var i = 0; i < 10; i++) {  
    setTimeout(function() {  
        console.log(i);    
    }, 1000);  
}  
//结果全部是10
//闭包解决
for(var i = 0; i < 10; i++) {  
    (function(j) {  
        setTimeout(function() {  
            console.log(j);    
        }, 1000);  
    })(i);  
} 

参考资料:https://blog.csdn.net/pcaxb/article/details/100583697

9.this的指向

1.当函数作为对象的方法被调用时,this 指向该对象

2.作为普通函数调用时,this 总是指向全局对象(window)

3. 构造器调用,构造器里的 this 就指向返回的这个对象

4. Function.prototype.call 或 Function.prototype.apply 调用,将this指向第一个参数指明的对象。

5.全局范围:指向window(严格模式下不存在全局变量,指向undefined);

参考资料:https://blog.csdn.net/pcaxb/article/details/87622552

10.new具体做了些什么

(1)创建一个对象

(2)将构造函数的作用域赋给新对象(因此this指针就指向了新的对象) 【代码:p.__proto__ = Person.prototype】

说明:Person中的prototype是在创建构造函数的时候创建的。其实原型对象就是构造函数的一个实例对象。Person.prototype就是Person的一个实例对象。相当于在Person创建的时候,自动创建了一个它的实例,并且把这个实例赋值给了prototype。

function Person(){};
var temp = new Person();
Person.prototype = temp;

(3)执行构造函数中的代码

(4)返回新对象

参考资料:https://blog.csdn.net/pcaxb/article/details/100668246

11.原型和原型链

参考资料:https://blog.csdn.net/pcaxb/article/details/100668246

12.继承方式

参考资料:https://blog.csdn.net/pcaxb/article/details/100668246

13.数组常用方法

1.改变原数组

尾部删除pop(),尾部添加push(),头部删除shift(),头部添加unshift(),排序sort(),颠倒数组元素reverse(),删除或插入元素splice();
2.不改变原数组

合并数组concat(),拼接数组元素join(),截取元素slice(),indexOf(),lastIndexOf(),toString()
 

参考资料:Array数组方法总结

14.数据存储

Cookie:用于客户端与服务端通信,也具有本地存储的功能

localStorage,sessionStorage:专门用于存储

区别:

大小:Cookie容量为4K,因为用于客户端与服务端通信,所有http都携带,如果太大会降低效率; localStorage,sessionStorage大小为5M。

失效时间:Cookie会在浏览器关闭时删除,除非主动设置删除时间;localStorage一直都在直到用户主动删除或清除浏览器缓存;sessionStorage在浏览器关闭时删除。

 

JavaScript原生系列-总结篇(一)

博客地址:https://mp.csdn.net/postedit/100654006

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值