专项练习10

目录

一、选择题

    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>

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131349141
今日推荐