A. Math.max(arr)
B. Math.max(arr[0], arr[1], arr[2], arr[3])
C. Math.max.call(Math, arr[0], arr[1], arr[2], arr[3])
D. Math.max.apply(Math,arr)
分析:
Math.max(args...)传入参数是任意数量的值
A 传入数组,所以错误
B 可以
C Function.call()可以传入任意多个参数,C正确
D Function.apply()第二个参数以数组形式传递,D正确
结果:B、C、D
三、分析代码,最后执行结果为?
var A = {n: 4399};
var B = function(){this.n = 9999};
var C = function(){var n = 8888};
B.prototype = A;
C.prototype = A;
var b = new B();
var c = new C();
A.n++
console.log(b.n);
console.log(c.n);
这道题中console.log(b.n);
在查找b.n是首先查找 b 对象自身有没有 n 属性,如果没有会去原型(prototype)上查找
当执行var b = new B()时,函数内部this.n=9999(此时this指向 b) 返回b对象,b对象有自身的n属性,所以返回 9999
console.log(c.n);
同理,当执行var c = new C()时,c对象没有自身的n属性,向上查找,找到原型 (prototype)上的 n 属性,因为 A.n++(此时对象A中的n为4400), 所以返回4400
结果:9999 4400
四、代码之后,arr的值是多少
var arr=[{a:1},{}];
arr.forEach(function(item,idx){
item.b=idx;
});
分析:
forEach()方法是对数组中的每一项运行给定函数,回调函数的参数item为数组当前项,idx为当前索引。
这道题就是把数组每一项添加属性 b,并且属性 b 的值为当前项的数组索引值。
A. function add(a,b){return a+b;} 函数表达式
B. var add=new Function(‘a’,’b’,’return a+b’) 函数表达式
C. function add(a,b){return a+b;} 函数声明
D. var add=function(a,b){return a+b;} 函数声明
E. var add=new Function(‘a’,’b’,’return a+b’); 函数声明
分析:
js函数定义的几种方式
定义方法 代码块
函数声明 function sum(a,b){ return a+b }
函数表达式 var sum = function(a,b){ return a+b }
构造函数 var sum = new Function('a','b','return a+b')//不推荐使用,影响函数解析性能
六、this指向
以下代码输出结果为?
八、下列代码显示结果是
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}
分析:
这道题考察了JS的类型转换,这里的var x是一个对象,任何对象转为布尔值,都为得到 true。
题目的第二部分,一定要注意 y = Boolean(0),而不是 y = new Boolean(0)。这两个有很大区别,用 new 调用构造函数会新建一个布尔对象,此处没有加 new,进行的是显示类型转换,所以就是false
十、BOM考察
以下关于History对象的属性或方法描述正确的是( )
A. go表示刷新当前页面。
B. back回到浏览器载入历史URL地址列表的当前URL的前一个URL。
C. forward转到浏览器载入历史URL地址列表的当前URL的下一个URL。
D. length保存历史URL地址列表的长度信息。