Bootstrap

前端面试题总结

1.普通数据类型

(1)普通数据类型有哪些?

​ 字符串型 string

数值型 number

undefined

 null

布尔型 boolean

(2如何检测类型?

console.log(typeof data)

instanceof

Array isArry()

(3)如何转换数据类型?

  • 转字符串

数据.toString()

String(数据)

​隐式转换: 数据+' '
  • 转数值

Number(数据) '123aaa'转完之后是NaN

parseInt(数据) '123aaa'转完之后是123

​parseFloat(数据)

隐式转换:数据*/-
  • 转布尔值
Boolean(数据)

布尔值false的有undefined, null, ' ', NaN, 0

2.this

(1)this指向

  • 全局中, this 指向 window

  • 函数中,严格模式下, this 指向 undefined ;非严格模式下, this 指向 window

  • 定时任务中, this 指向 window ( setTimeOut , Interval )

  • 绑定事件中, this 指向事件源

  • 对象中, this 指向这个对象

    对象:无序键值对的集合

    a. 对象字面量

    var obj = {
      name: 'wkk',
      age: 18,
      skill: function () {
        console.log('敲代码')
      }
    }
    console.log(obj.name)
    console.log(obj['age'])
    ​
    //遍历对象
    for (var k in obj ) {
      console.log(k)
      console.log(obj[k])
    }

    b. new Object()

    var obj = new Object()
    obj.name = "wkk"
    obj.skill = function () {}

    c.构造函数

  • 构造函数中, this 指向 new 出来的实例

    //构造函数
    function Dog (name, color, voice) {
       this.name = name           //this指向 new 出来的实例
       this.color = color 
       this.bark = function (voice) {
         console.log(voice)
       }
     }
     var wkk=new Dog('wkk','灰色')
     console.log(wkk)
     wkk.bark('haha')
    • new关键字执行了哪些过程?

      (1) 先创建了一个空对象

      (2) 然后让 this 指向这个空对象

      (3) 给属性赋值,给方法赋值

      (4) 把结果 return 出来

(2)改变this的方法及区别

  • call 立即执行,第一个参数修改 this 指向,之后的用 , 隔开

  • apply 立即执行,第一个参数修改 this 指向,第一个之后的用[ ]包裹

  • bind 不会立即执行,第一个参数修改 this 指向,之后的用 , 隔开

3.前端模块化

应用分成了多个模块,就像魔方一样,

​ 如果没有模块化,就会出现文件依赖,命名冲突的问题, JS 本来是没有前端模块化这个概念的

​ 为了解决文件依赖,命名冲突的问题,js社区提出了前端模块化这个概念

​ 主要流行的有 3 个:

​ 前台: AMD (异步模块定义)(代表产品 Require.js) , CMD (通用模块定义) (Sea.js),

​ 后台: CommonJS 规范 (node.js)

​ 比如在 node.js 中规定,一个文件就是一个模块,模块的外部是访问不到内部成员的, exports,module.exports 是导出模块, require 是导入模块

​ 之后 ES6 支持了前端模块化:

​ 每一个js就是一个独立的模块,可以通过 import 导入模块, export.default 导出模块

const a=1
const b="ABC"
//默认导出 001.js
export.default {
  a,b
}
//按需导出 001.js
export var c='啦啦啦'
export var d='哈哈哈'

//-------------------------------------------------

//默认导入和按需导入 index.js
import m1, {c,d} from '001.js'
console.log(m1)     //{a:1,b:'ABC'}
console.log(c)     //啦啦啦

4.浏览器私有前缀

​ 为了兼容老版本的写法

  • -webkit- 谷歌(blink),苹果(webkit)

  • -moz- 火狐(gecko)

  • -ms- IE(trident)

  • -o- 欧鹏(presto,现在blink)

5.BFC

块格式化上下文

可以理解为是一个独立的作用域.该区域内所有的布局不会影响到区域外元素的布局

怎么产生一个BFC?

  • float的值不为空

  • position得值为absoult或fixed

  • display的值是inline-block...

  • overflow的值不是visible

6.语义化标签

header, footer, aside, nav, artile, section, address,

易于SEO搜索引擎优化,便于维护

7.数组和字符串的内置方法

数组:

  • 翻转( reverse )

  • 排序( sort )

  • 追加( push 后加, unshift 前加)

  • 删除( pop 后删, shift 前删)

  • 获取索引( indexof , lastindexof )

  • 截取( slice (开始,结束), splice (开始,个数))

  • 拼接( concat )

字符串:

  • ​ 根据元素找索引( indexof )

  • ​ 根据索引找元素( charAt )

  • ​ 截取( slice (开始,结束) , substr (开始,个数))

  • ​ 拼接( concat )

  • ​ 替换( replace )

  • ​ 分割为数组( split )

8.js执行机制(宏任务和微任务)

​ js 是单线程的,分为同步任务和异步任务(定时器, ajax ,事件绑定),同步任务在执行栈中执行,异步任务在执行队列中执行.

先执行执行栈中的,然后把执行队列中的放到主线程中执行.

​ 异步任务又分为宏任务和微任务。先执行微任务,再执行宏任务,同级别按顺序执行。

​ 宏任务:script (可以理解为外层同步代码), ajax , setTimeOut/setInterval , 文件操作等;

​ 微任务:promise ,.then , .catch , .finally , process.nextTick 等;

9.事件流

  • 三个阶段

1.事件捕获阶段

2.事件执行阶段

3.事件冒泡阶段

阻止事件默认行为(preventDefault)

阻止事件冒泡(stopPropagation)

原生 js 中, return false 只阻止事件默认行为,不阻止事件冒泡; jquery 中, return false 都阻止.

  • 事件委托

要给子元素绑定事件时,可以将事件统一绑定给它的父元素带代理完成事件.

  • 点透问题

层级较高的定位元素绑定 touchstar 事件,会同时触发层级低的元素,发生堆叠.

解决: fastclick第三方 js 库(还可以解决 300ms 延时)

10.本地存储

  • sessionstorage

5M 存储在浏览器内存中 离开页面消失 只限当前页面使用

  • localstoage

20M 存储在计算机硬盘 永不消失 当前浏览器的所有页面使用

  • .setIetm(k,v) .getIetm(k) .removeItem(k) .clear()

11.web组成,顶级对象,隐式迭代,链式编程

web标准构成: 结构HTML, 表现css, 行为 js

h5: html5, css3 , js

js: ECMAscript , DOM(document), BOM(window)

顶级对象: jquery ($,jquery)

node.js(global)

  • js入口函数: window.οnlοad=function () {} 结构和全部资源执行完成后执行 目的是为了先加载页面再进行js;

    ​ DOMContentLoaded 结构完成就执行(图片特别多时使用)

  • jquery入口函数: $(function () { })

;