目录
一、选择题
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.child = obj,把堆里的 {num1:117,child:undefined} 的child指向 {num2: 935}
⑥总结
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>