前端JS面试题(更新中)

文章讲述了JavaScript中的基础概念,如变量类型、算术运算、字符串操作、this关键字的行为、数组方法(如去重和filter)、以及异步编程中的宏任务与微任务。还讨论了函数作用域和箭头函数的this指向问题。
摘要由CSDN通过智能技术生成
  1. var foo = 10 + ‘20’; foo的值是_________。
    • 答案:1020
    • 考点:加号俩边有字符串类型默认为字符串相加
  2. console.log(0.1 + 0.2 == 0.3); 输出值是__________。
    • 答案:false
    • 考点:js默认将数字转换为2进制进行计算比较 但浏览器精确度不够
  3. “I’m a Iasagna hog”.split(“”).reverse().join(“”); 该语句的返回值是__________.
    • 答案:goh angasal a m’I
    • 考点:字符串和数组的方法先将该字符串分割成数组再反转之后再拼接成字符串
  4. (window.foo||(window.foo = “bar”)); window.foo 的值是__________。
    • 答案:|| 的用法
  5. 下面代码中输出各是什么?
    foo();
    var foo = function() {
    	console.log(1);
    };
    foo(); 
    function foo() {
    	console.log(2);
    }
    foo();
    
    • 答案:2 1 1
    • 考点:变量的提升
  6. 下面代码中数组的长度是 ____。
    var arr =[]
    arr[10] = 10
    
    • 答案:11
    • 考点:数组索引与长度的关系
  7. 下面代码的输出是 __________。
setTimeout(()=>{
    console.log("1")
    Promise.resolve().then(()=>{
        console.log("2")
    })
})
console.log("3")
Promise.resolve().then(()=>{
    console.log("4")
    setTimeout(()=>{
        console.log("5")
    })
})
  • 答案:34125
  • 考点:js内部执行机制 同步----》异步(微任务----》宏任务)
    • then属于微任务
    • 定时器属于宏任务
  1. 写出下面输出结果
var name = 'window'
var person1 = {
name: 'person1',
foo1: function () {
		console.log(this.name)
	},
foo2: () => console.log(this.name),
foo3: function () {
	return function () {
			console.log(this.name)
		}
	},
foo4: function () {
		return () => {
			console.log(this.name)
		}
	}
}
var person2 = { name: 'person2' }
person1.foo1() // person1
person1.foo1.call(person2) // person2

person1.foo2() // window
person1.foo2.call(person2) // window

person1.foo3()() // window
person1.foo3.call(person2)() // window
person1.foo3().call(person2) // person2

person1.foo4()() // person1
person1.foo4.call(person2)() // person2
person1.foo4().call(person2) // person1
  • 答案在代码块中的注释中
  • 考点:this指向问题 call改变this指向 箭头函数的this不可更改
  1. 封装一个formatArr方法实现数组对象的去重
 var arr = [
        { id: 1, city: "南京" },
        { id: 2, city: "南京" },
        { id: 3, city: "杭州" },
        { id: 4, city: "广州" },
      ];
      // 利用对象的key 来判断 当前的 对象中是否有重复

      function formatArr(array) {
        const map = new Map();
        for (const key of array) {
          if (!map.has(key.city)) {
            map.set(key.city, key);
          }
        }
        return [...map.values()];
      }
  • 方法有很多 写出一种即可 冒泡、map、利用数组对象……
  1. 实现一个数组filter方法
function myFilter(array,fn){
	let newArr = []
	for(let i = 0;i < array.length;i++){
		fn(array[i])&&newArr.psuh(array[i])
	}
	return newArr			
}
var arr = [1,2,3,4,9,8]
var f = myFilter(arr, function(item) {
	return item % 2 == 0 
})
console.log(f) // [2,4,8]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值