前端疑难题 每日一题,365天就多掌握365个知识点 查漏补缺

这是一个每日更新的前端JS难题集合,涵盖隐式类型转换、函数声明、Array判断、this指针、Promise、原型链等多个方面。通过解答这些题目,可以帮助开发者深入理解JavaScript的微妙之处,提高编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题集是关于JS一些有点深度,且容易让人犯错的题目,每日更新一道,相信你们也能从中学到知识。

1.如下代码的输出结果:

 	  console.log(1 + "2" + "2");
      console.log(1 + +"2" + "2");
      console.log("A" - "B" + "2");
      console.log("A" - "B" + 2);
      console.log('3' - '2') // 1

在这里插入图片描述

知识点:隐式强制类型转换。

2.下面关于块内声明函数的做法哪些是正确的?

A:   if(x){
   
   
       function foo(){
   
   
        //   ... 
       }
   }

B:   if(x){
   
   
       var foo=function(){
   
   
        //    ..
       }
   }

C:   if(x){
   
   
       foo=function(){
   
   
           //..
       }
   }

D: ECMAScript明确规范了块内函数,javascript实现了这个规范。

答案:B

解:一般我们尽量不要在if语句内声明函数,当必须声明函数时使用函数表达式,不要用函数声明方式。不用函数声明方式是为了防止函数声明提升,导致if条件没有起作用。选项A中的foo函数就是提升到全局中了。

3.如何判断一个js对象是否是Array,arr是Array实例,请用最准确的方法判断:

let arr = ["小李"];

A: typeof arr
B: arr instanceof Array
C: arr.toString === "[object Array]"
D: Object.prototype.toString.call(arr) === "[object Array]"

 console.log(typeof arr);
 console.log(arr instanceof Array);
 console.log(arr.toString === "[object Array]");
 console.log(Object.prototype.toString.call(arr) === "[object Array]");

在这里插入图片描述
答案:D
在常规数组中,B、D都可以判别数组,但D是最准确的。

分析:

  • A: typeof(arr)返回的是一个Object
  • B: instanceof 在跨frame对象构建的场景下会失效
  • C: 这是个错误用法,且不能判断是否为数组,Arrays.toString()才是正确用法,返回一个字符串。

4.以下立即执行函数的执行结果:

(function (foo) {
   
   
        console.log(foo.bar);
        console.log(typeof foo.bar);
      })({
   
   foo: {
   
   
          bar: 1
          }
        });

在这里插入图片描述
这个答案有可能会有人认为是this指针造成的,但仔细看传入的参数就会得出正确结果。

传入后的参数,实际为

参数:foo={
   
   
		foo:{
   
   
			bar:1
		}
	};

所以正确调用是:

console.log(foo.foo.bar);
console.log(typeof foo.foo.bar);

5.下面代码中a在什么情况下会打印1:

	  var a=?;
      if(a==1&&a==2&&a==3){
   
   
          console.log(1);
      }

答案:

var a = {
   
   
        i: 1,
        toString: function () {
   
   
          return a.i++;
        },
      };
      
if (a == 1 && a == 2 && a == 3) {
   
   
        console.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值