前几天一直整理项目答辩的材料,制作脑图,所以没时间。今天有空了,做了一下这套题,简答题写的很简略,只是按自己的第一思路写了个过程,具体的就往下看吧。
不定向选择题部分
1.使用了"use strict"后,以下哪些描述错误
"use strict";
var x = 17;
with (obj) {
x;
}
//会报obj未定义的错误
"use strict";
var x;
delete x;
//运行正常
function f(a){
"use strict";
a = 42;
return a==arguments[0];
}
f(5); //运行结果为true
function f(str){
"use strict";
return eval(str);
}
f(‘alert(1)’);
//运行正常,弹窗1的对话框
解答:这道题考察了严格模式的具体限制,在项目里所有的js文件都出现了这行代码,针对于题来说:
a.严格模式不能使用with语句
b.严格模式不能直接删变量,只有当configurable设置为true时才能删
c.所有变量必须有声明,不能为空
d.严格模式加入了eval作用域,没问题
链接:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
2.以下输出结果为true的有
A." ’’==false
B." ’’==0
C." ’’==[]
D." ’’=={}
解答:这道题考察了基本数据类型的比较,基本方法如下:
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
3.问输出结果
var a = 0;
function b(c) {
console.log(a);
var a = 1;
arguments[0] = 2;
console.log(c);
console.log(a);
}
b(3);
console.log(a);
解答:这道题我做错了,是因为我没有理解argument数组的用法,argument数组装的是各形参的值,在function里只用一个形参c,所以argument[0]代表就是c,所以 arguments[0] = 2;会覆盖实例化传入的实参3。
a,因为a会先在函数的作用域找a的声明,但是有a的声明和赋值在后面。所以会默认为没有定义,返回undefined,后面就不用说了
4.以下代码的执行后将输出()
var a = 0;
var obj = {
a:'obj',
b:function(a){
setTimeout(function(){
console.log(this.a);
},1000)
}
}
obj.b(1);
解答:这道题考察了setTimeout中回调函数的this是指向window的,所以答案很明显,就是0
5.以下运算结果不是number类型的是
A."a"-1
B.1/0
C.0 && "a"
D.new Number(1)
解答:参考第二题,D是对象没的说,关键是C返回的是Infinity,它也是number类型,所以选A,B,C
6.[“1", "2", "3"].map(parseInt)的执行结果是?
解答:这道题之前见过一次,答案是[1,NaN,NaN]
正规格式是parseInt(string,radix)。
第一个参数是被解析的字符串,第二个参数是进制(可不些)
第二个参数的特点:
①如果radix省略或为0,则按默认进制(十进制)进行解析
②radix为2~36之间的整数,如果在这个范围之外,返回NaN
③string的首字符为0,则默认解析为8进制。string首字符为0x(0X)则默认解析为16进制。其他情况默认为10进制。
④最好加上第二个参数,不然即使碰到首字符为0,应该以8进制方式进行,在某些浏览器下,如ff也会按10进制进行
所以原式就成了
parseInt('1',0);parseInt('2',1);parseInt('3',2)