JS基础

作者: AuthorJim | 来源:发表于2017-07-25 14:32 被阅读0次

JavaScript 面试

JS基础篇

变量类型和计算

  • JS中使用typeof能得到哪些类型
    -undefinded
    • string
    • number
    • boolean
    • object
    • function
  • 何时使用 === 何时用 ==
    if (obj.a == null) {
        // 这里相当于obj.a === null || obj.a === undefined
    }
  • JS中有哪些内置函数
    • Array
    • Object
    • RegExp
    • Date
    • Error
    • Function
    • Boolean
    • String
    • umber
  • JS变量按照存储方式区分为哪些类型,并描述其特点

区分为值类型、引用类型。值类型的值复制之后不会相互干涉,引用类型的值复制是变量指针的复制,并不是真正的值的拷贝

  • 如何理解JSON

JSON只不过是JS对象

原型和原型链

JS三座大山之一

  • 如何准确判断一个变量是数组类型

instanceof。用于判断引用类型属于哪个构造函数的方法

  • 写一个原型继承的例子
function Elem(id) {
    this.elem = document.getElementById(id)
}
Elem.prototype.html = function (val) {
    var elem = this.elem
    if (val) {
        elem.innerHtml = val
        return this
    } else {
        return elem.html()
    }
}
Elem.prototype.on = function (type, fn) {
    var elem = this.elem
    elem.addEventListener(type, fn)
    return this
}
var fuck = new Elem('fuck')
fuck.html('<p>hello</p>').on('click', function () {
    alert('clicked!')
})
  • 描述new一个对象的过程
    • 创建一个新对象
    • this指向这个新对象
    • 执行代码,即对this赋值
    • 返回this
  • zepto源码中如何使用原型链

作用域和闭包

  • 说下对变量提升的理解

变量定义函数声明都会提前定义

  • 说明this几种不同的使用场景
    • 作为构造函数执行
    • 作为对象属性执行
    • 作为普通函数执行
    • call apply bind
  • 创建10个<a>标签,点击时弹出对应的序号
for (var i = 0; i < 10; i++) {
    (function (i) {
        var a = document.createElement('a')
        a.innerHTML = i + '<br>'
        a.addEventListener('click', function (e) {
            e.preventDefault()
            alert(i)
        })
        document.body.appendChild(a)
    })(i)
}
  • 如何理解作用域
    • 自由变量
    • 作用域链
    • 闭包的两个场景 (函数作为值返回,函数作为参数传递)
  • 实际开发中闭包的应用

封装变量,收敛权限

function isFirstLoad() {
    var _list = []
    // 保护了_list变量
    return function (id) {
        if (_list.indexOf(id) >= 0) {
            return false
        } else {
            _list.push(id)
            return true
        }
    }
}
var firstLord = isFirstLoad()
firstLord(10)   // true
firstLord(10)   // false
firstLord(20)   // true

异步和单线程

  • 同步和异步的区别是什么

同步会阻塞代码执行,异步不会

  • 一个关于setTimeout的笔试题
  • 前端使用异步的场景有哪些
    • 定时任务:setTimeout、setInterval
    • 网络请求:ajax加载、动态<img>加载
    • 事件绑定

其他

  • 获取2017-06-10格式的日期
function formateDate(dt) {
    if (!dt) {
        dt = new Date()
    }
    var year = dt.getFullYear()
    var month = dt.getMonth()
    var date = dt.getDate()
    if (month < 10) {
        month = '0' + month
    }
    if (date < 10) {
        date = '0' + date
    }
    return year + '-' + month + '-' + date
}
  • 获取随机数,要求是长度一致的字符串格式
  • 写一个能遍历对象和数组的通用forEach函数
function forEach(obj, fn) {
    var key
    if (obj instanceof Array) {
        obj.forEach(function (item, index) {
            fn(item, index)
        })
    } else {
        for (key in obj) {
            fn(key, obj[key])
        }
    }
}

webAPI

DOM操作

  • DOM是哪种数据结构

  • DOM操作的常用API有哪些
    • 获取DOM节点,以及节点的property和attribute
    • 获取父节点,获取子节点
    • 新增节点,删除节点
  • DOM节点的attr和property有何区别
    • property只是一个JS对象的属性的修改
    • attribute是对html标签的修改

BOM操作

  • 如何检测浏览器的类型
var ua = navigator.userAgent
var isChrome = ua.indexOf('Chrome')
console.log(isChrome)
  • 拆解url的各部分

location....

事件

  • 编写一个通用的事件监听函数
function bindEvent(elem, type, selector, fn) {
    if (fn == null) {
        fn = selector
        selector = null
    }
    elem.addEventListener(type, function (e) {
      var target
      if (selector) {
          target = e.target
          if (target.matches(selector)) {
              fn.call(target, e)
          }
      } else {
          fn(e)
      }  
    })
}
  • 描述事件冒泡流程
    • DOM树形结构
    • 事件冒泡
    • 阻止冒泡
    • 冒泡的应用 ==> 事件代理
  • 对于无限下拉加载图片的页面,如何给每个图片绑定事件

事件代理:代码简介、减小浏览器的压力

项目运行环境

页面加载

  • 从输入url到得到html的详细过程
    • 浏览器根据DNS服务器得到域名的IP地址
    • 向这个IP的机器发送http请求
    • 服务器收到、处理并返回http请求
    • 浏览器得到返回的内容
  • window.onload和DOMContentLoaded的区别
    • window.onload是等
      待全部资源都加载完毕才会执行,包括图片、视频
    • DOMContentLoaded是当DOM结构渲染完成即执行,此时图片、视频可能没有加载完成

性能优化

  • 多使用内存、缓存或者其他方法
  • 减少CPU计算、减少网络

安全性

Snippets

发生类型转换的场景

  • 字符串拼接
  • == 运算符
  • if语句
  • 逻辑运算

原型规则

原型规则是学习原型链的基础

  1. 所有的引用类型都具有对象的特性,即可用自由扩展属性('null'除外)
  2. 所有的引用类型都有一个proto属性(隐式原型),属性值是一个普通对象
  3. 所有的函数都有一个prototype属性(显式原型),属性值是一个普通对象
  4. 所有引用类型的proto属性值指向它的构造函数的prototype属性值
  5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的proto(即它的构造函数的prototype)中寻找

执行上下文

  • 范围:一段<script>或者一个函数
  • 全局:变量定义、函数声明
  • 函数:变量定义、函数声明、this、arguments

this

this要在执行时才能确定值,定义时无法确认

var a = {
    name: 'A',
    fn: function () {
        console.log(this.name)
    }
}
a.fn()  // this ==> a
a.fn.call({name: 'B'})  // this ==> {name: 'B'}
var fn1 = a.fn
fn1()   // this ==> window

作用域

  • 没有块级作用域
  • 只有函数和全局作用域
  • 自由变量:当前作用域未定义的变量

linux命令

  • mkdir 创建新文件夹
  • ls 查看当前文件夹内容
  • pwd 查看当前文件夹路径
  • rm -rf a 删除文件夹
  • cp 拷贝文件
  • mv 移动文件
  • rm 删除文件
  • vim 创建并编辑文件
  • cat 查看文件内容
  • head 查看文件前部内容
  • tail 查看文件末尾内容

加载资源的形式

  • 输入url(或跳转页面)加载html
  • 加载html中的静态资源

加载资源的过程

  • 浏览器根据DNS服务器得到域名的IP地址
  • 向这个IP的机器发送http请求
  • 服务器收到、处理并返回http请求
  • 浏览器得到返回的内容

浏览器渲染页面的过程

  • 根据HTML结构生成DOM tree
  • 根据CSS生成CSSOM
  • 将DOM和CSSOM整合成RenderTree
  • 根据将DOM和CSSOM整合成RenderTree开始渲染和展示
  • 遇到script时,会执行并阻塞渲染

加载资源优化

  • 静态资源合并压缩
  • 静态资源缓存
  • 使用CDN让资源加载更快(不同区域的网络优化)
  • 使用SSR后端渲染,数据直接输出到HTML中

渲染优化

  • CSS放钱、JS放后面
  • 懒加载(图片懒加载,下拉加载更多)
  • 减少DOM查询,对DOM查询做缓存
  • 减少DOM操作,多个操作尽量合并在一起执行
  • 事件节流
  • 尽早执行操作

相关文章

  • React-Native 随笔

    学习基础: js的基础知识, rect.js基础 JSX语法基础 FlexBox布局 安装 安装node.js下载...

  • 最新web前端相关课程学习链接

    js基础篇 js进阶篇 js高级篇 vue基础篇 vue高级篇 react基础 react高级 Nodejs基础 ...

  • web前端 -- Day23 js高级

    js基础 JavaScript简称:JS JS分三个部分: ECMAScript标准---基础的语法 DOM D...

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • 4/07day28_js基础

    day28_js基础 回顾 JS基础语法 JS运算符 JS流程控制语句 条件语句 JS的条件语句和Java语法基本...

  • 2018-12-20

    1.01.尚硅谷_JS基础_JS简介(1) 10.10.尚硅谷_JS基础_Null和Undefined(10) 1...

  • JS基础和WebAPIs的关联性

    学习ECMAscript标准规定的基本语法掌握JS基础语法只学习JS基础做不了网页交互效果学习JS基础语法是为了后...

  • 2019-07-27 前端面试题

    1.js的基础类型 js的基础类型包括 Undefined , Null , String ,Number ,...

  • 网络编程(十九) JavaScript(9)

    一、 JS的组成 1.1 JS基础阶段以及Web APIs阶段 【1】JS基础阶段 我们学习的生死ECMAScri...

  • 发现•分享—2019-01-17

    文章 JS JS 异步编程六种方案 JS基础—原型对象的那些事(一) JS基础—原型对象的那些事(二) CSS 综...

网友评论

      本文标题:JS基础

      本文链接:https://www.haomeiwen.com/subject/svbwkxtx.html