目录
一、选择题
1、执行以下程序,下列说法中,正确的是()
2、下面有关JavaScript中系统方法的描述,错误的是?
3、以下 JavaScript 代码,在浏览器中运行的结果是
4、假设DOM结构为
二、编程题
1、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
一、选择题
1、执行以下程序,下列说法中,正确的是()
var arr = new Array(3); ...①
arr[0] = 1;
arr.b = 0;
console.log(arr.length); ...②
arr.forEach(value=>{
console.log(value); ...③
})
for(var i in arr){
console.log(arr[i]); ...④
}
A、①式创建一个长度为3的数组
B、②式输出结果为4
C、③式输出结果为1 0
D、④式输出结果为1
正确答案:A 你的答案:C
解析:
(1)选项解读
①A选项:当new Array()括号内只有一个参数时,该参数表示数组的长度
②B选项:数组的长度仍为3,因为arr.b = 0,实际上是为变量arr赋予属性b,该属性不是数组元素,所以arr.length值不变,仍为3
③C选项:forEach函数只遍历数组元素,由于arr数组的数组元素只有1,因此输出结果为1
④D选项:for...in...会遍历数组以及数组的可枚举属性,因此输出结果为1 0
(2)步骤解读
var arr = new Array(3); ...① //结果是【empty ,empty ,empty 】
arr[0] = 1; //结果是【1,empty ,empty 】
//通过点操作符(.)添加的属性和length属性处于同一层级,不会影响length的值
arr.b = 0; //结果是【1,empty ,empty ,b:0】
console.log(arr.length); ...② //结果是3
arr.forEach(value=>{
console.log(value); ...③ //结果是1 ,因为此时遍历的是【1,empty ,empty ,b:0】
})
//通过点操作符(.)添加的属性可以用for...in...循环遍历,但不能用foreach循环遍历
for(var i in arr){
console.log(arr[i]); ...④ //结果是1,0 ,因为此时遍历的是【1,empty ,empty ,b:0】
}
(3)总结
①for in 既能遍历数组,也能遍历对象
②for in 遍历数组时i是下标,遍历对象时i是对象的key
③对于数组来说 arr[i] 是1,对于键值对来说arr[i]是0
2、下面有关JavaScript中系统方法的描述,错误的是?
A、parseFloat方法:该方法将一个字符串转换成对应的小数
B、isNaN方法:该方法用于检测参数是否为数值型,如果是,返回false,否则,返回true。
C、escape方法: 该方法返回对一个字符串编码后的结果字符串
D、eval方法:该方法将某个参数字符串作为一个JavaScript执行
正确答案:B 你的答案:D
解析:
(1)isNaN方法
①NaN:非数值(Not a Number)是一个特殊的数值,表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
②ECMAScript 定义了 isNaN() 函数,该函数接受一个参数,该参数可以是任何类型,函数会确定这个参数是否“不是数值”
③isNaN() 在接受一个值后,会尝试将这个值转换为数值
④当值不是数值的时候,会直接转换为数值,例如字符串“10”或Boolean值,任何不能被转换为数值的值,该函数则返回true
(2)其他选项
eval:返回字符串表达式中的值
unEscape:返回字符串ASCI码
escape:返回字符的编码
3、以下 JavaScript 代码,在浏览器中运行的结果是
function foo(){
console.log('first');
setTimeout(function (){
console.log('second');
},5);
}
for(var i=0;i< 4399999999;i++) {
foo();
}
A、first,second,first,second..依次顺序输出
B、首先全部输出first,然后全部输出second
C、first,second无顺序输出
D、首先输出first,超出5ms输出所有second,最后输出余下的first
正确答案:B 你的答案:C
解析:
JavaScript 是单线程的,setTimeout 设置的是异步任务,会放在 macrotask 里面,等待执行栈的代码执行完毕之后才会执行 macrotask 里面的异步任务,所以这里会等待 for 循环执行完毕才会执行定时器设置的任务
4、假设DOM结构为:<div id="a"><div id="b"></div></div>,JS代码为:
document.getElementById('a').addEventListener('click', e => {console.log(1)});
document.getElementById('b').addEventListener('click', e => {e.preventDefault();console.log(2)});
当点击id为b的div时,控制台输出的内容是:
A、1
2
B、2
1
C、1
D、2
正确答案:B 你的答案:D
解析:
(1)preventDefault():取消事件默认行为,如阻止点击提交按钮时对表单的提交(本题中click并没有什么默认行为)
(2)拓展
①stopImmediatePropagation() 取消事件冒泡同时阻止当前节点上的事件处理程序被调用,影响当前的事件
②stopPropagation() 取消事件冒泡,不影响事件
③cancelBubbe() 取消事件冒泡
④returnValue() 取消事件默认行为
二、编程题
1、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
输入:[1, 2, 3, 4, 2], 2 输出:[1, 3, 4]
解析:
(1)法一:创建新数组,判断不同的数值则push进新数组,输出新数组
<script>
var arr = [1,2,3,4,2]
var item = 2
var newArr = []
function remove(arr,item){
arr.forEach(element => {
if(element != item){
newArr.push(element)
}
});
return newArr
}
remove(arr,item)
console.log(newArr);
</script>
(2)法二:过滤器filter
<script>
var arr = [1,2,3,4,2]
var item = 2
let s
function remove(arr,item){
s = arr.filter(i=>{
return i != item
})
return s
}
remove(arr,item)
console.log(s);
</script>