专项练习21

目录

一、选择题

    1、下列逻辑表达式的结果为false的是()

    2、请问以下JS代码输出的结果是什么?

    3、以下哪些对象是Javascript内置的可迭代对象?

二、编程题

    1、找到数组参数中的最大值并返回。注意:数组中只包含数字


一、选择题

1、下列逻辑表达式的结果为false的是()

A、NaN == NaN

B、null == undefined

C、'' == 0

D、true == 1

正确答案:A

解析:

(1)选项解释

A选项:NaN 无论与谁比较,包括它自己,结果都是 false。判断两个NaN相等要用Object.is(NaN,NaN)

B选项:null 与 undefined 比较,结果为 true,除此之外undefined 和 null 与谁比较,结果都为 false

C选项:String 与 Number 比较,String Number 类型,再比较,转为 Number 类型的字符串结果为0==0,结果为 true

D选项:Boolean 与其他类型比较,Boolean 先转Number 类型,true 转为 Number 类型的值为 1,故 true==1 的结果为 true

(2)实例

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

2、请问以下JS代码输出的结果是什么?
let obj = {
  num1: 117
}
let res = obj;
obj.child = obj = { num2: 935 };
var x = y = res.child.num2;
console.log(obj.child);
console.log(res.num1);
console.log(y);

A、117、117、undefined

B、117、117、935

C、undefined、117、935

D、undefined、117、undefined

正确答案:C        你的答案:B

解析:

(1)let obj = { num1: 117 }  

把obj放在栈里,把 { num1:117} 放在堆里,让obj指向堆里的 { num1:117 }

(2)let res = obj;

把res放在栈里,把res也指向堆里的 { num1:117 }

(3) obj.child  =  obj  =  { num2: 935 }; 

①重点:赋值操作先定义变量(从左到右),进行赋值从右到左

②定义变量:obj.child,给堆里的 { num1:117 } 加一个child属性,得 {num1:117,child:undefined}

③定义变量:obj,之前在栈里的obj

定义变量

④赋值:obj = { num2: 935 },把 { num2: 935 } 放在堆里,把栈里的obj指向堆里的 { num2: 935 } 

obj赋新的值

⑤赋值:obj.child = obj,把堆里的 {num1:117,child:undefined} 的child指向  {num2: 935}

obj.child赋到新值里

⑥总结

obj = { num2: 935 } 

res = { num1: 117,child:{ num2: 935 }  }

(4)var x = y = res.child.num2;

同第(3)步的①原理,最后赋值从右到左,y = res.child.num2 即 y = 935,x = y 即 x = 935


3、以下哪些对象是Javascript内置的可迭代对象?

A、Array

B、Map

C、String

D、Object

正确答案:ABC        你的答案:ABCD

解析:

(1)String、Array、TypedArray、Map 和 Set 都是内置可迭代对象,因为它们的原型对象都拥有一个 Symbol.iterator 方法

(2)MDN参考文档

迭代器和生成器 - JavaScript | MDN


二、编程题

1、找到数组参数中的最大值并返回。注意:数组中只包含数字

解析:

(1)Math.max() 方法求最大,注意方法不能接受数组作为参数,需要解构赋值将数组解构

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        return Math.max(...array)
    }
    console.log(_max(array));
</script>

(2)for() 依次循环数组值,找到最大值

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        let max = array[0]
        for(let i =0;i<array.length;i++){
            if(max<array[i]){
                max = array[i]
            }
        }
        return max
    }
    console.log(_max(array));
</script>

(3)sort() 方法对新数组从大到小排序,shift() 返回新数组排序第一个值

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        const newArr = array
        newArr.sort((a,b)=>{
            return b-a
        })
        return newArr.shift()
    }
    console.log(_max(array));
</script>

(4)sort() 方法对新数组排序从小到大,pop() 返回新数组排序最后一个值

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        const newArr = array
        newArr.sort((a,b)=>{
            return a-b
        })
        return newArr.pop()
    }
    console.log(_max(array));
</script>

(5)reduce() 方法遍历数组元素,并返回max值

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        let max = array.reduce((max,cur)=>{
            return max>cur?max:cur
        })
        return max
    }
    console.log(_max(array));
</script>

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131581951