一、填空题
文章目录
1、获取浏览器窗口宽度的操作是( ),获取浏览器窗口可视区域高度的操作是( )
document.documentElement.clientWidth || document.body.clientWidth
document.documentElement.clientHeight || document.body.clientHeight
2、获取指定元素节点box的包含边框和padding 的宽度操作( ),获取高度的操作是( )
box.offsetWidth
box.offsetHeight
3、获取指定元素box行内样式width的操作是( ),获取该元素外部样式display的操作是( )
box.style.width
getComputedStyle(box).width || box.currentStyle.width
4、数组的操作中,判断一个数据是否包含在数组中可以选择的操作是( )如果向数组中添加数据可以选择的操作是( ),如果从数组中删除数据可以选择的操作是( )
indexOf() includes() find() findIndex() some()
arr[索引]=值 push() unshift() splice()
pop() shift() splice()
5、如果要进行字符串中部分字符的替换,可以选择的操作是( )
replace() split()/join()
二、简答题
1、简述一下什么是预解析?
思路:预解析,主要和作用域空间联系到一起进行说明;一个变量或者函数主要在自己的作用域空间中完成预解析!需要注意函数特殊情况(表达式方式声明函数的预解析)
2、元素的clientWidth、offsetWidth以及scrollTop的区别?
思路:一般情况先说共同点(js原生操作、获取尺寸位置进行定位),然后分析区别和应用场景(clientWidth 元素宽度,不包含边框;offsetWidth元素宽度,包含边框;scrollTop网页文档和浏览器窗口之间滚动距离);(clientWidth一般用在获取浏览器窗口尺寸;offsetWidth一般用在获取元素节点尺寸;scrollTop一般用在滚动事件中进行操作)
三、编程题
1、编写一个函数,可以获取任意数值区间的随机数
思路:Math.random() 获取 0~1随机数
Math.random() * num 获取0~num之间随机数
min <= n < max: Math.floor(Math.random()*max)+min
2、编写一个函数,实现数组的冒泡排序算法
思路:如果能理解冒泡的操作过程,直接编写代码就好,本身代码难度不高(循环、选择)
如果不能理解冒泡操作过程,直接记忆编码套路
> 嵌套两层循环,内存循环终点是数组长度减去(外层循环次数+1)
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr.length - i - 1; j++){
}
}
> 比较内层循环第一个数据和下一个数据
if(arr[j] > arr[j+1]){
> 条件满足的情况下完成数据交换
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
3、编写一个函数,实现数组的插入排序算法
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
/**
* 插入排序算法
*/
function insertion(arr) {
let len = arr.length;
let preIndex, current;
for (let i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && current < arr[preIndex]) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
var arr = [3,5,7,1,4,56,12,78,25,0,9,8,42,37];
insertion(arr);