8月js总结
1、什么是变量提升?
js在编译阶段将var声明和function声明前置
var声明在最前
提升变量声明,不提升赋值
function整体提升
2、arguments是什么?
实参列表,有索引,有长度,伪数组,只能用于函数内部
3、setAttribute设置的属性有什么特点?
任意属性,显示在标签结构上,值是字符串
4、哪些数组遍历方法不一定遍历到每一个元素
some,符合条件则停止
every,有一个不符合条件结束
5、改变数组的长度,对数组有什么影响?
<length,将尾部多余的元素删除
>length,在尾部添加空元素
6、列举两个数组浅拷贝的方法
arr.concat()
arr.slice()
7、数组push和pop的作用是什么?返回值是什么?
push在尾部添加新元素,返回数组长度
pop删除尾部元素,返回被删除的元素
8、用on绑定事件与addEventListener绑定事件的区别
同一事件on只能绑定一次
add能绑定多次
add通过第三个参数true实现事件捕获,on只有事件冒泡
9、什么是事件冒泡
事件触发时向外传播,外层绑定的相同事件会被自动触发
10、事件委托的原理是什么?优缺点是什么?
利用事件冒泡机制,将事件绑定在外层元素上,当事件触发时,通过e.srcElement检测事件源
优点:避免大量绑定事件,节省资源;动态添加的元素可以触发事件;修改html内容后,内部元素可以触发事件
缺点:大量事件委托给同一元素,可能会导致事件误判
1、arr.reduce(function(a,b,c,d){
},f)
a,b,c,d,f分别代表什么?
a:初始值、累计结果
b:数组元素
c:对应的索引
d:数组
f:初始值
2、continue、break,return的区别
continue:跳出当前循环,进入下一次循环
break:用于循环时,中断整个循环,用于switch时,结束当前分支判断
return:返回函数的执行结果,只能用于函数内部
3、列举7个数组遍历方法,并说明用途
forEach 展示或修改数组元素
some 验证数组中是否有满足条件的元素
every 验证数组元素是否都满足条件
map 由return内容组成的新数组
filter 筛选符合条件的元素组成新数组
reduce 累计,用于元素求和或者字符串拼接
reduceRight 与reduce一致,方向相反
4、阻止事件冒泡,阻止默认行为?
阻止冒泡
event.stopPropagation()标准浏览器
event.cancelBubble=true;兼容非标准浏览器,如IE78
阻止默认行为
event.preventDefault()标准浏览器
event.returnValue=false;非标准浏览器
return false;只能写在最后
5、如何在body的title属性中存一个数组?
document.body.title=JSON.stringify([1,2,3]);
document.body.setAttribute("title",JSON.stringify([1,2,3]))
6、检测数组中是否有偶数,用什么数组方法?
some,every与some条件相反,结果相反
7、在数组[1,2,3,4,5,6,7,8,9]中随机获取5个不重复的元素,组成新数组
var arr=[1,2,3,4,5,6,7,8,9].sort(function(){
return 0.5-Math.random();
}).slice(-5);
8、如何理解dom元素的offsetLeft?
当前dom元素与最近的外层设置了position的元素之间左侧距离,如果外层没有设置position的元素,结果是与文档左侧的距离
9、var arr=[
{name:"张三",age:20},
{name:"李四",age:17},
{name:"王五",age:18}
],按age属性升序排列
arr.sort(function(a,b){
return a.age-b.age
})
10、for循环绑定事件,为什么不能在事件触发时获取索引?
for循环为每个元素绑定了事件,但是在事件触发之前for循环已经结束,当事件触发时,只能获取到指针变量更新的最终值
1、获取父元素、子元素、标签子元素、第一个标签子元素、下一个兄弟元素?
parentNode\childNodes\children\firstElementChild\nextSibling
2、innerHTML与innerText的区别?
设置:innerText将标签作为文本显示
innerHTML将内容解析成html结构
获取:innerText忽略html标签
3、列举6种dom元素获取方式,并指出返回结果
document.getElementById(id名) dom元素
document.getElementsByTagName(标签名) HTMLCollection,集合
document.getElementsByClassName(class名) HTMLCollection,集合
document.getElementsByName(name属性值) NodeList,集合
document.querySelector(选择器) 第一个匹配的dom元素
document.querySelectorAll(选择器) NodeList,集合
4、a&&b和a||b分别是什么意思?
a&&b:a成立取b的值或者执行b语句
a||b:a成立取a,否则取b
5、将字符串“abcd”变成数组["D0.jpg","C1.jpg","B2.jpg","A3.jpg"]
"abcd".toUpperCase().split("").reverse().map(function(v,i){
return v+i+".jpg"
})
6、冒泡排序的原理?
每一轮比较时,依次对前后两个元素比较,按大小交换位置,每一轮都比出一个最大值或者最小值
外层循环条件length-1是因为每一轮都会比出一个最大或最小值,最后一轮不需要比较了
内层循环条件length-i-1,-i是因为每一轮会比出一个最大值或最小值,不再参与比较,-1是因为每次需要2个元素比较,否则最后一个元素要与不存在的元素undefined比较
7、如何删除数组[1,2,3,4,5]最后3个元素?返回值是什么?
[1,2,3,4,5].slice(-3)
[3,4,5]
8、什么是全局作用域和函数作用域?
script标签下是全局作用域,全局作用域在关闭页面时销毁
函数内部是函数作用域,函数作用域在函数调用完成之后销毁
9、数组[1,2,3,5]中有几个奇数,用什么方法?
[1,2,3,5].filter(function(v){
return v%2=1
})
[1,3,5].length
10、js跳转页面的方式?
location.href=”地址”
location.assign(“地址”)
location.replace(“地址”)
浙公网安备 33010602011771号