1)真伪数组转换

真伪数组的意思不在解释了很简单 真数组就是array 对象的 都是伪数组

那么我们怎么区分真伪数组?

1)真数组长度可变

2)伪数组不可以变

3)真数组可以使用数组方法 伪数组不可以 比如((.forEach))

我们先做真数组转伪数组

var temp1=[1,2,4,4,5,6,7];
var obj1={};
[].push.apply(obj1,temp1);
console.log(obj1);

[].push.apply(obj1,temp1)的意思 是temp1的内部元素依次取出 存入obj1

伪数组转真数组

//  伪数组转换成真数组 这个方法在IE8和以下不好用
var temp={0:'ss',1:"222",length:2};
var obj=[];
[].push.apply(obj,temp);
console.log(obj);

//IE8支持(推荐)
var obj2= [].slice.call(temp);
console.log(obj2);

用[].push.apply(a,b)也可以转换 但是IE8一下不支持 所以

用 var b =[].slice.call(a)

slice:是截取用的

splice:是做删除 插入 替换用的

3)怎么区分判断真伪数组?

//怎么区分真伪数组?
console.log( typeof temp1);//object
console.log( typeof temp); //object
console.log( temp1.toString());//1,2,4,4,5,6,7
console.log( temp.toString()); //[object Object]
//获得对象类型 意思是把对象.toString方法里的this转成temp1
console.log(({}).toString.apply(temp1));//[object Array]

({}).toString.apply(temp1) 这个方法是把对象的类型返回回来 

先知道怎么用 以后再去感觉原理

2)我们在时候JQ的时候 一般都用过$(function(){}) 入口函数 和JS的 window.onload作用是一样的

那么Jq的是怎么实现的那 他们的作用是什么?

  入口函数的的原理是 当界面标签加载完 在执行一个function() 那么 我们的问题是怎么知道HTML加载完了? HTML标签是什么? 当然是Document了 那方法属性肯定都在DOM里

1)DOMContentLoaded 事件就是IE8以上版本 中DOM加载完的实现  下面的代码可以替代window.onload

//DOMContentLoaded事件  只要DOM元素加载完就会实现这个代码 
//只支持高级浏览器 IE8 以上 与onload平级
document.addEventListener("DOMContentLoaded",function()
{
var div = document.querySelectorAll("div");
console.log(div);
})

2)IE8以下因为没有DOMContentLoaded 事件和 AddEventlistener 所以我们用下面代码

1)attachEvent 和onreadystatechange 支持IE8 以下版本

2)document.readyState 这个版本都支持 它就是判断DOM是否加载完毕的属性 下面是它的四个状态

 uninitialized - 还未开始载入

 loading - 载入中

  interactive - 已加载,文档与用户可以开始交互

 complete - 载入完成

// onreadystatechange事件专门用于监听 document.readyState属性的改变
document.attachEvent("onreadystatechange",function()
{
if(document.readyState=='complete'){
var div = document.querySelectorAll("div");
console.log(div);
}

Jq那么自己实现入口函数的完整的代码 就是

ready:function(fu)
{
if(document.readyState=='complete')
{
//如果加载完毕 执行这个方法
fu();
}else if(document.addEventListener)
{
//DOMContentLoaded事件 只要DOM元素加载完就会实现这个代码
//只支持高级浏览器 IE8 以上 与onload平级
document.addEventListener("DOMContentLoaded",function()
{
//如果加载完毕 执行这个方法
fu();
})

}else
{
//IE8以下
document.attachEvent("onreadystatechange",function()
{
if(document.readyState=='complete'){
//如果加载完毕 执行这个方法
fu();
}
})
}