面试题

210 阅读4分钟

1: 请问 a 的结果是什么?

if(! "a" in window){
   var a1;
}

alert(a); // undefined

2:执行以下程序段后,x的值是

var x = 0
switch(++x) {
    case 0: ++x;
    case 1: ++x;
    case 2: ++x;
}
console.log(x);//  3

3:以下哪些操作会触发Reflow:(B 、C)

var obj = document.getElementById("test");
A:alert(obj.className)

B:alert(obj.offsetHeight)

C:obj.style.height = "100px"

D:obj.style.color = "red"

4:会输出什么

var name = 'The window'
let object = {
    name: 'My Object',
    getNameFunc: function() {
        return function() {
            return this.name;
        }
    }
}
console.log(object.getNameFunc()()) // The window

5: 会输出什么

let name = 'The window'
let object = {
    name: 'My Object',
    getNameFunc: function() {
        return function() {
            return this.name;
        }
    }
}
console.log(object.getNameFunc()()) // undefined或者什么都不显示,因为let定义的变量不会挂到window上

6:函数防抖、截流的概念和使用场景?

7:js判断变量是否为数组,至少2种方案

  • 方法一:使用 instanceof 运算符 语法:判断的变量 instanceof 判断的对象的类
let arr = [1, 2, 3]
console.log(arr instanceof Array) // true

  • 方法二:构造函数,语法:变量.constructor === 变量类型
let arr = [1, 2, 3]
console.log(arr.constructor === Array) // true
  • 方法三:isArray()方法 语法 Array.isArray(变量),返回 true 表示是数组,否则不是
console.log(Array.isArray(arr)) // true
  • 方法四:Object.prototype.toString.call()
console.log(Object.prototype.toString.call(arr) === '[object Array]') 
// true, 注意,每一个参数永远是小写的object,第二个参数是变量具体的类型,首字母大写
  • 方法五:通过对象的原型方式来判断
console.log(arr.__proto__ === Array.prototype) // true
  • 方法六:Object.getPrototypeOf()
console.log(Object.getPrototypeOf(arr) === Array.prototype) // true
  • 方法七:isPrototypeOf()
console.log(Array.prototype.isPrototypeOf(arr)) // true

8:什么是跨域?前端如何解决?

9:请写出以下http状态码的含义(200,301,302,401,404,500,502)

  • 200:OK 请求已成功
  • 301:Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  • 302:Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
  • 401:Unauthorized 请求要求用户的身份认证
  • 404:Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
  • 500:Internal Server Error 服务器内部错误,无法完成请求
  • 502:Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

10:写出5个常用linux命令&含义

11:css画三角形,至少三种方案

12:css清除浮动方法

13:vue兄弟组件间通信方法

14:vue2生命周期

15:React 组件的生命周期方法

16:请说出React中高阶组件的定义和应用场景

17:React中如何用useMemo实现useCallback

18:git实例 场景:你是第一天来公司上班的,项目代码托管在GitLab,项目地址:git@lab.com:org/project.git,现在有一处代码需要你修改。请写出完成此项任务中,与git/gitlab相关的操作步骤

19:你使用 my-dev分支完成了一个需求的开发后,从提交QA测试,QA发现了一个bug,你修复完成后,需要合并到主分支(master分支)打包上线。请描述一下在此任务中,你需要用到的git、npm相关操作步骤

20:前端性能优化方案

21:写出以下代码执行结果

function showName() {
   console.log('Toutiao');
}

showName();

function showName() {
  console.log('OceanEngine');
}

showName();

-----------------------------------华丽的分隔线----------------------------------------

var myname = "abc"

function showName2(){
  console.log(myname);
  var myname = "aabbcc"
  console.log(myname);
}

showName2();

-----------------------------------华丽的分隔线----------------------------------------

let myname3= 'toutiao'

{

  console.log(myname3)

  let myname3= 'oceanengine'

}

-----------------------------------华丽的分隔线----------------------------------------

if ([] == false) {console.log(1);};

if ({} == false) {console.log(2);};

if ([]) {console.log(3);};

if ([1] == [1]) {console.log(4);};

if (null == undefined) {console.log(5);};

if (null == false) {console.log(6);};

22:以下是一个页面的代码,请写出用户点击了 id是i的div 后控制台的输出结果

<body>
  <div id="i"/>
</body>
<script>
  document.body.addEventListener("mousedown", () => {
    console.log("key1")
  }, true)     

  document.getElementById("i").addEventListener("mousedown", () => {
    console.log("key2")
  }, true)
  document.body.addEventListener("mousedown", () => {
    console.log("key3")
  }, false)     

  document.getElementById("i").addEventListener("mousedown", () => {
       console.log("key4")
  }, false)

</script>

23:请写出以下代码的执行结果

 setTimeout(function() {

     console.log('setTimeout');

 })

 new Promise(function(resolve) {

     console.log('promise');

     for (let i = 0; i < 10000; i++) {

         if(i === 10) {

             console.log('for');

         }

         i == 9999 && resolve('resolve');

     }

}).then(function(val) {

     console.log(val);

})

console.log('console');

24:代码实现

1:原生js实现获取cookie指定key值 2:JS实现对货币格式化函数:formatMoney(1234567890); // 返回 1,234,567,890 3:返回数组里出现次数最多的数字:MostNumber([1, 2, 2, 1, 3, 1, 1]); // 返回 1

25:123['toString'].length + 123 = ?

26:

var x = 1;
function f(x, y = function () { x = 3; console.log(x); }) {
    console.log(x)
    var x = 2
    y()
    console.log(x)
}
f()
console.log(x)
//1、上面的代码输出的是什么?
//2、如果把var x = 2注释掉,输出的又是什么?
//3、如果把f函数第一个参数x改成xx,输出的又是什么? 
//4、如果把f函数第一个参数x设置了默认值为4,输出的又是什么?