「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」
1.下面代码的执行结果是什么?
console.log(123..toString());
答案:"123"
解析:包装类的原因,js会将123.通过new Number(123.)打包成包装类对象。调用的是Number.prototype.toString,所以new Number(123.).toString === Number.prototype.toString
2.有两个变量a和b,其值为number类型且非NaN,不借助其他变量,完成a与b的交换
答案:方式有很多种,下面是其中给一种
var a = 101;
var b = 102;
a = a + b;
b = a - b;
a = a - b;
console.log(a,b)
3.下面代码的执行结果是什么?为什么
**
var a = {},b={key:"b"},c={key:'c'};
a[b] = 123;
a[c] = 456;
console.log(a[b]);
答案:456
解析:在设置对象的属性时,如果属性传入是一个对象,js会隐式的讲变量变成对象对应的[object Object]
所以:a[b]和a[c]其实都相当于a["[object Object]"],所以他们操作的都是a对象的同一个属性,因此结果为456
4.下面代码的执行结果是?
(function(){
try{
throw new Error
}catch(x){
console.log(x)//Error
var x = 1;
var y = 2;
console.log(x)//1
}
console.log(x);//undefined
console.log(y);//2
})();
答案: 1 undefined 2
解析:最开始执行匿名立即执行函数参数的作用域中,由于预编译将变量x和y提升了值为undefined
当执行catch函数时,里面有自己的形参变量x,这里的值是错误信息:Error,后面赋值为1;所以里面catch中先打印Error后打印1
y被赋值为2;
所以外面打印的值:x为undefined,y为改变的值2
5.下面代码的执行结果是?
var a = 10;
function fn() {
console.log(this.a)
}
var obj = {
a: 5,
method: function (fn) {
fn();//自己执行的,所有this指向window,打印出10
arguments[0]();
}
}
obj.method(fn, 1)
答案:10 undefined
解析:函数自己执行里面this指向window,
函数传入另外一个函数作为参数,通过arguments[0]的形式调用,相当于arguments.0(),arguments.0就代表该函数,所以里面this指向arguments。
再比如:
**
var length = 10;
function fn() {
console.log(this.length)
}
var obj = {
length: 5,
method: function (fn) {
fn();//自己执行的,所有this指向window,打印出10
arguments[0]();//相当于arguments.0(),这里arguments的length为2,并且arguments.0中的0就是传入的fn,所以执行函数,相当于arguments调用。打印出2
}
}
obj.method(fn, 1)
答案是:10 2