zoukankan      html  css  js  c++  java
  • 前端面试题:JS篇

    1.var let const区别

      var是ES5语法,let const是ES6语法;

      var有变量提升(不会报错,只会打印出undefined)

      var和let是变量可以修改,count是常量不可以修改

      let和count是块级作用域,var没有

    2.typeof能判断哪些类型

      undefined、string、number、boolean、symbol [值类型]

      object(注意 typeof null === ‘object’) [引用类型instanceof]

      function

    3.列举强制类型转换和隐式类型转换

      强制 parseInt parseFloat Number string toString等(toString转换null undefined会报错)

      隐式 +拼接字符串 == === if 逻辑运算等

    4.split()和join()的区别

      split() 将字符串切割成数组 ‘1-2-3’.split(‘-’)

      join()  将数组转换为字符串  [1,2,3].join(‘-’)

    5.数组 pop push unshift shift 分别是什么

      pop尾部删除 —— 返回删除元素 —— .pop()

      push尾部添加 —— 返回length —— .push(要添加的元素)

      unshift头部添加 —— 返回length —— .unshitf(要添加的元素)

      shift头部删除 —— 返回删除元素 —— .shift()

    6.数组slice和splice区别

      slice是截取 splice是剪接;

      slice是纯函数 splice是非纯函数

    7.数组的API有哪些是纯函数(纯函数不改变源数组没有副作用,返回一个数组)

      concat数组的拼接 .concat([50,60,70])

      slice(start,end)按照数组的下标截取(不包括end)

      .map()  .filter过滤

    8.ajax请求get和post的区别

      get一般用于查询操作,post一般用于用户提交操作

      get参数拼接在url上,post放在请求体内(数据体积可能更大)

      安全性:post易于防止CSRF/XSRF跨站请求伪造

    9.闭包是什么?有何特性?有何影响?

      特性:①函数嵌套函数

         ②函数内部可以引用外部的参数和变量

         ③参数和变量不会被垃圾回收机制回收

      好处:避免全局变量的污染,私有成员的存在

      缺点:①常驻内存,增加内存使用量 ②使用不当容易造成内存泄漏

      应用场景:作为参数被传递,作为返回值被返回

      * 自由变量的查找,要在参数定义的地方 而不是执行的地方

    10.如何阻止事件冒泡和默认行为

      event.stopPropagation() 阻止事件冒泡       (IE:event.cancelBubble = true)

      event.preventDefault()  阻止默认行为/事件  (return false)

    11.添加、删除、替换、插入到某个节点的方法

      新建节点:createElement() //创建一个具体的元素
           createTextNode() //创建一个文本节点

      添加  appendChild()

      移除  removeChild()

      替换  replaceChild()

      插入  insertBefore()

    12.如何减少DOM操作

      缓存DOM查询结果

      多次DOM操作合并到一次插入

    13.解释jsonp原理,为何不是真正的ajax

      jsonp是动态创建script标签,回调函数

      而ajsx是页面无刷新请求数据操作,通过XMLHttpRequest来实现的

    14.document load 和 document ready的区别

    1 window.addEventListener('load', funtion(){
    2     // 页面的全部资源加载完才会执行,包括图片、视频等
    3 })
    4 document.addEventListener('DOMContentLoaded', funtion(){
    5     // DOM渲染完即可执行,此时图片、视频还可能没有加载完(常用)
    6 })

    15.‘==’和‘===’区别

      ==会自动转换类型,然后再比较

      ===不转换类型之前比较,严格相等

      使用场景:①只有在 ==null 时用双等,其他一律用===

                     ②这是jQuery源码中的写法,推荐

    16.函数声明和函数表达式的区别

      函数声明function fn(){…}

      函数表达式 const fn = function(){…}

      函数声明会再代码执行前预加载,而函数表达式不会

    17.new Object()和Object.create()的区别

      {}等同于new Object(),原型Object.prototype

      Object.create(null) 没有原型

      Object.create({…})可指定原型

    18.如何用js实现继承

      ①class继承  ②prototype继承

    19.如何捕获js中的异常

    1 ①用try-catch手动捕获
    2 ②window.onerror = function(message信息, source源码, lineNum行号, colNum, error){
    3     // 第一,对于跨域的js,如CDN的,不会有详细的报错信息
    4     // 第二,对于压缩的js,还要配合sourceMap反查到未压缩代码的行、列
    5 }

    20.什么是JSON

      json是一种数据格式,本质是一段字符串

      json格式和JS对象结构一致,对JS语言更友好(json现已覆盖大多XML)

      window.JSON是一个全局对象:.stringify对象转化json字符串 .parse字符串转换为对象

    21.获取当前页面url的参数

      传统方式:location.search

      新的API:URLSearchParams

    1 function query(name){
    2     const search = location.search
    3     const p = new URLSearchParams(search)
    4     return p.get(name)
    5 }
    6 query('a')

    22.数组去重一行代码实现

      [...new Set()]

  • 相关阅读:
    vue中dom元素和组件的获取
    Vue.js中父子组件之间的传值和传方法
    IDEA中的快捷键
    springmvc中使用controller时,跳转视图会带上外层的地址
    通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
    vue中的组件
    vuejs
    成员变量(实例变量)&局部变量&静态变量(类变量)的区别
    代码块
    重载&重写
  • 原文地址:https://www.cnblogs.com/guisenbin/p/12335855.html
Copyright © 2011-2022 走看看