这个系列将持续更新前端笔试题一期十题,每五题做一个标题(方便跳转),您可以一期一期阅读,也可以在点击汇总,一口气看完,如果对题目有不理解的地方,欢迎大家在评论区提问,如果有更好的意见也欢迎大家留言!!!
function fn(value){
console.log(arguments instanceof Array); ...①
console.log(arguments.length);...②
console.log(value);...③
var arr = [...arguments];...④
}
fn(1,2,3);
A :①式的输出结果为false
B: ②式输出结果为2
C: ③式的输出结果为1
D: ④式可以利用arguments对象新生成一个数组
答案: BD
解析: arguments是函数(除了箭头函数外)的内置对象,它是一个伪数组,因此①式结果为false;arguments对象用来获得函数的全部实参,因此②式输出结果为3而非2;value是函数的形参,匹配第一个实参,因此③式输出结果为1;④式是参数解构,可以新生成一个真正意义上的数组。
22.以下哪些语句触发了隐式的类型转换
A:parseInt(12.34, 10)
B:0 ? 1 : 2
C:2e1 * 0xaa
D:1 + ‘1’
答案: ABD
解析:
A:parseInt() 函数可解析一个字符串,并返回一个整数。
所以说,number类型的12.34发生隐式转换为string。
B:三元运算符,会判断?前的表达式为true或者false。所以number类型的0发生了隐式转换为boolean。
C:e是js里面指数的一种表示形式。也就是10的多少次方。
2e1 等价于 2 *(10^1) = 20
2e2 等价于 2 (10^2)= 200
0xaa是16进制的表示方法。相当于十进制的170。
这里都是number类型,发生了数字的乘法运算:20170,没有发生类型转换。
D:+运算发生了字符串的隐式转化。原本number类型的1,和string类型的’1’进行了+运算,连接了字符串。返回’11’。
下面求a中最大值的代码正确的是
A:Math.max(a)
B:Array.max(a)
C:Math.max.call(null,a)
D:Math.max.apply(null,a)
E:以上均不是
答案: D
解析: 使用apply方法,方法有两个参数,用作 this 的对象和要传递给函数的参数的数组。 可以为方法指定调用对象与传入参数,并且可以让传入的参数以数组的形式组织。 Math.Max.Apply(Math,tmp); 也可以写成 Math.Max.Apply({},tmp);的简写形式
✨24.执行以下程序,输出结果为()
class Phone{
constructor(price){
this.price = price;
}
get price(){
return 999;
}
}
var p = new Phone(888);
console.log(p.price);
A:999
B:undefined
C:抛出异常
D:888
答案: C
解析: 当类中一个属性只有get()方法而无set()方法时,该属性是无法进行赋值的,连构造方法中的初始化都不行,因此,当对象的price属性在构造方法中进行初始化,会抛出异常。
25.对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?
A:parseInt(a);
B:Math.floor(a);
C:Math.ceil(a);
D:a.split(‘.’)[0];
答案: AB
解析:
A. parseInt转换为整数,默认为10进制,结果为10
B. floor向下取整,结果为10
C. ceil向上取整,结果为11
D. split操作数必需为正则或字符串不能是number,所以不报错
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
}, 1000 * i);
}
A:1 2 3 4 5
B:0 1 2 3 4
C:4 4 4 4 4
D:5 5 5 5 5
答案: D
解析: setTimeout()是一个异步函数,由于js会先执行所有同步任务,再执行异步任务,所以当开始执行setTimeout()异步任务时,for循环早已结束,并且由var声明的变量i不具有块级作用域的特点,当for循环结束时,i值为5,故再执行setTimeout()函数时,输出结果为5 5 5 5 5,D选项正确。
var uname = "window";
var object = {
uname :"object",
fun:function(){
console.log(this.uname);
return function(){
console.log(this.uname);
}
}
}
object.fun()();
A:object
B:window
C:object window
D:window object
答案: C
解析: object.fun()()等效于var fn = object.fun(); fn();实际上是调用函数两次,第一次是调用object对象的fun函数,第二次是调用fun函数的返回函数。第一次调用fun函数时,this指向上一级对象,即object对象,因此输出对象object的uname属性值object,第二次调用的返回函数,其this指向window对象,这是因为匿名函数具有全局性,匿名函数的this指向window对象,因此输出结果为window对象的uname属性值window。
class Dog{
static dog(){
console.log(this); // ①
}
bark(){
console.log('狗会叫');
}
}
var dog = new Dog();
A:①式的this指代类的实例对象
B:调用dog方法,既可以使用Dog.dog(),也可以使用dog.dog()
C:调用bark方法,只能使用dog.bark(),不能使用Dog.bark()
D:在类中,不允许静态方法和非静态方法重名
答案: C
解析: dog方法为静态方法,bark方法为实例方法,静态方法本身不能使用实例对象来调用,所以this不会指向实例对象,A选项错误;静态方法只能由类进行调用,实例方法只能由实例对象进行调用,B选项错误,C选项正确;D选项,由于类内部的静态方法的调用者只能为类,实例方法的调用者只能为实例对象,不会在调用时造成歧义,因此允许重名。
A:window.event.cancelBubble = true;
B:window.event.returnValue = false;
C:event.stopPropagation();
D:event.preventDefault();
答案: BD
解析:
阻止默认事件: e.preventDefault() | e.returnValue = false (IE)
阻止冒泡:e.stopPropagation() | e.cancelBubble = true (IE)
A:oStringObject instanceof String
B:typeof oStringObject == ‘string’
C:oStringObject is String
D:以上答案都不正确
答案: A
解析: 针对 B 注意题干问的是判断一个对象是否为String类型 typeof 对象 ==>“object”
‘hello’ 和 new String(‘hello’) 的区别,前者是字符串字面值,属于原始类型,而后者是对象
typeof 'hello'; // 'string'
typeof new String('hello'); // 'object'