30.Js中怎么绑定事件
(1) 在DOM中直接绑定
- 也就是直接在html标签中通过 onXXX=“” 来绑定
<input type="button" value="点我呦" onclick="alert("hello world!")"/>
(2) JavaScript代码中直接绑定
- 在JavaScript中通过查找DOM对象,对其绑定,elementObject.οnclick=function(){} 的格式
document.getElementById("demo").onclick=function testAlert(){
alert("hello world!");
}
(3)通过事件监听函数绑定
- 使用 attachEvent(IE方式) 和 addEventListenter(W3C方式)
var oBox = document.getElementById("container");
oBox.addEventListener("click",fn(),false);
第一个参数:事件名称
第二个参数:作为事件处理程序的函数
第三个参数:捕获值false(不捕获)/true(捕获),不写表示默认值false
31. js 深拷贝和浅拷贝区别,以及实现深拷贝的方法
-
深拷贝和浅拷贝最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用,深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,而浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。
-
最简单的方法就是JSON.parse(JSON.stringify())
这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function) -
用递归去复制所有层级属性
function deepCopyTwo(obj) {
let objClone = Array.isArray(obj) ? [] : {};
if (obj && typeof obj == 'object') {
for (const key in obj) {
//判断obj子元素是否为对象,如果是,递归复制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepCopyTwo(obj[key]);
} else {
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
return objClone;
}
32. 数组的常用操作方法?
shift() 方法:把数组的第一个元素删除,并返回第一个元素的值
concat() 方法:用于连接两个或多个数组,并返回一个新数组,新数组是将参数添加到原数组中构成的
join() 方法:用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
pop() 方法:用于删除并返回数组的最后一个(删除元素)元素
push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度
reverse() :方法用于颠倒数组中元素的顺序。
slice() 方法:可从已有的数组中返回选定的元素。slice(开始截取位置,结束截取位置)
splice() :方法向/从数组中添加/删除项目,然后返回被删除的项目。splice(开始删除的下表位置,删除数组元素的个数,向数组添加的新项目。);
unshift:将参数添加到原数组开头,并返回数组的长度
sort(orderfunction):按指定的参数对数组进行排序
33. 事件委托是什么
- 事件委托,也叫事件代理,就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
- 事件委托详细(我能看懂的解释)