错题小本本

文章目录

1 - 10

1.下面代码执行结果是?

var h5course = false;
var result = h5course / 0;

if (result) {
  console.log(result * 2 + "2" + 4);
} else {
  console.log(!result * 2 + "2" + "4");
}

答案:“224”
解析:0/0null/0undefined/0false/0 都为 NaN,其它整数/0 为 infinity,其它负数/0 为 -infinity


2.下面代码的执行结果是什么?

console.log(2.toString());

答案:报错:Invalid or unexpected token
解析:在 2.toString() 这条语句中,这个 . 有两个解释:1. 小数点;2. 方法调用;所以这里产生了歧义。在这里因为这个点紧跟于一个数字之后,所以按照规范,解释器就把它判断为一个小数点,这条语句就变成了一个浮点数,但是 toString() 不是一个数字,所以编译之后就报错了。

解决这个问题有以下几种方式:

console.log(2..toString());   // 这里第一个 . 是表示小数点;相当于(2.0).toString()
console.log(2 .toString());   // 这里使用一个空格来告诉解释器,这个 . 是方法调用
console.log((2).toString());  // () 的优先级高,优先解释

3.下面代码执行结果是什么?

function A(a) {
  A = function (b) {
    console.log(a + b);
  };
  console.log(a++);
}

A(1);
A(2);

答案:1、4


4.下面代码的执行结果是?

var str = new Array(4).toString();
console.log(str);

结果:',,,'
解析:

new Array();      // []  无参数:声明一个空数组; 
new Array(4);     // [,,,] 一个参数:声明一个长度为4的数组,但数组没有任何元素;
new Array(1, 2);  // [1, 2]  多个参数:声明一个数组,参数都为数组的元素;

5.下面代码执行结果?

var num = 3;
conosle.log(num.toString(2));
console.log(num.toFixed(2));

结果:11、3.00
解析:
toString() 传入一个参数时:表示把当前数字当成10进制转成对应的进制数,此题目是转成2进制。
toFixed() 方法把当前数字变成保留指定位数的小数,注意会四舍五入!,此题保留2位小数。


6.有2个变量 ab,其值都为 number 类型且非 NaN,不借助其它变量,完成 ab 的交换。

答案:

// 方法一
var a = 1;
var b = 2;
a = a + b - a;
b = a + b - b;

7.下面代码的执行结果是什么?

var a = {},
  b = { key: "b" },
  c = { key: "c" };
a[b] = 123;
a[c] = 456;
console.log(a[b]);

答案:456
解析:在设置对象的属性时,如果属性传入一个对象,JS 会隐式的将变量变成字符串类型,所以 a[b]a[c] 其实都相当于 a['[Object Object]'],所以操作的都是对象 a 的同一个属性。


8.下面代码的执行结果是什么?

var user = "Alice";

function changeUser() {
  user = "Tom";
  console.log(user);
  return;

  function user() {
    console.log("user function");
  }
}

changeUser();
console.log(user);

自己做的结果:‘Tom’,‘Tom’
正确答案:‘Tom’,‘Alice’
解析:
错误思路:changeUser 里面的 user = 'Tom' 重写了全局变量。
正确思路:执行 changeUser 函数的时候,预编译将里面的变量 user 提升了,语句 user = 'Tom' 是在给局部变量赋值。


9.下面代码的执行结果是什么?

(function () {
  var user = (author = "Alice");
})();

console.log(author);
console.log(user);

自己做的结果:undefined、undefined
正确答案:‘Alice’,user is not defined
解析:当不使用 var 声明变量时,默认为全局变量,所以能够访问到 author;user 是局部变量,在全局是无法访问到的。


10.下面代码的执行结果是什么?

function fn() {
  console.log(this);
}

var obj = {
  method: function (fn) {
    fn();
    arguments[0]();
  },
};

obj.method(fn);

结果:Window,Arguments


11.如何获取函数实参和形参的个数?

function fn(a, b) {
  //1. 获取实参个数的方式:
  console.log(arguments.length); // 5
  
  // 2. 获取形参个数的方式:
  console.log(arguments.callee.length); // 2
  arguments.callee === fn, // 所以也可以用fn.length获取形参个数;
  console.log(fn.length); // 2
}

fn(1, 2, 3, 4, 5);

12.下面代码的执行结果是什么?

function fn(val) {
  this.x = val;
  return this;
}
var x = fn(5);
var y = fn(10);
console.log(x.x);
console.log(y.x);

结果:undefined,10
解析:在fn(5)执行完,window.x === window;在fn(10)执行的时候,window.x = 10window.y === window;
因此x.x其实就是new Number(10).x,所以打印出undefinedy.x其实就是window.x ,所以打印出10


13.下面代码的执行结果是什么?

var x = 5;

function fn(x) {
  // var x;
  x = 8;
  console.log(x);
}

fn();

console.log(x);

结果:8,5
解析:fn打印的x是局部变量x,所以先打印8,外面打印全局window的x,所以打印出5


14.下面代码的执行结果是什么?

var result = (function fn(n) {
  return n > 1 ? n * fn(n - 1) : n;
})(10);

console.log(result);

答案:10的阶层,即3628800

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值