js知识点总结

js变量类型和计算

值类型和引用类型

值类型:变量存储的值在栈内存中。常用的值类型有Number, String, undefined, Boolean, Symbol.

引用类型:变量存储的值是堆内存的某个地址,这个地址所指向的区域内存储具体数据。常见的引用类型有Object, Array, 及Function. Function 是特殊的引用类型,不用于存储数据。

typeof 运算符

识别所有值类型(null除外),识别函数,识别是否是引用类型

instanceof 判断对象类型, '==='判断null跟undefined类型

深拷贝

递归是重点。数组与对象。

变量计算-类型转换

字符串拼接,“ == ”,if语句和逻辑运算符

除了 ==null 外,都用 “ === ”

truly变量:!!a === true。falsely变量: !!a ===false。!!0 === false, !!'' === false, !!null === false, !!undefined === false, !!NaN === false, !!false === false

原型与原型链

原型

每个class都有显式原型:prototype,每个对应实例都有隐式原型:proto。class的prototype === 实例的protp,这也是 instanceof的原理

作用域和闭包

作用域

全局作用域,函数作用域,块级作用域。自由变量:一个变量在当前作用域被使用但未定义,浏览器会向上级作用域依次寻找。如果全局作用域中该变量都未找到,浏览器会报错

分号开头

圆括号开头的前一条语句:匿名立即执行函数表达式;中括号开头的前一条语句:数组,变量名

闭包

所有的自由变量的查找实在函数定义的地方,向上级作用域查找,不是在执行的地方。

this

this的取值是在执行上下文的时候确定。原型中的this是proto的对象。

同步和异步的区别

js是单线程语言,同时只能做一件事。

异步任务用于如网络请求,读写文件,定时任务等需要花费较长时间。异步不会阻塞代码的执行,等异步任务完成时再通过回调函数接着执行完。

promise

promise解决了回调地狱的问题(callback hell)

js web api

DOM

dom的本质是一颗树,一种特殊的xml。

DOM节点操作

property 是js对象操作属性的一种形式,设置js变量的属性,不会对标签产生影响。不会体现到html的结构中。尽量用property进行dom操作
attribute 是dom元素的方法,设置标签的属性,会对标签产生影响,会影响html结构。

DOM结构操作

  • 新增插入节点
    新建节点document.createElement()
    插入节点
    appendChild()
    移动节点
    document.getElementById()
    appendChild()
  • 获取子元素列表
    获取父元素
    p.parantNode
    获取子元素列表
    div.childNodes
    nodeType属性可以选出想要的p标签
  • 删除子元素
    removeChild()

DOM性能

缓存DOM查询结果
将频繁操作改为一次性操作 createDocumentFragment()然后 append 进去

BOM

  • navigator
    const ua = navigator.userAgent
    const isChrome = ua.indexof('Chrome')
  • screen
    screen.height
  • location
    locaton.href
    location.protocol
    location.hash
    location.pathname
    location.search
  • history
    history.back
    history.forward

事件绑定

  • 事件绑定
  • 事件冒泡
    stopPropagation
    子元素冒泡到父元素
    preventDefault
    通过事件冒泡实现事件代理
    减少浏览器内存占用
    代码简洁
    但不要滥用

ajax

xhr.readyState

  • 0 - (未初始化)还没有调用send()方法
  • 1 - (载入)已调用send()方法,正在发送请求
  • 2 - (载入完成)send()方法执行完成,已经接受到全部响应内容
  • 3 - (交互)正在解析响应内容
  • 4 - (完成)响应内容解析完成,可以在客户端调用
    xhr.status
  • 2xx - 表示成功处理请求,如200
  • 3xx - 需要重定向,浏览器直接跳转,如301(永久重定向),302(临时重定向),304(资源未修改)
  • 4xx - 客户端请求错误,如404(未找到),403(权限不够)
  • 5xx - 服务端错误
    手写一个简易的Ajax(promise)
    同源: 协议,域名,端口三者必须一致
    所有的跨域,都必须经过server端允许和配合
    未经server端运行就实现跨域,说明浏览器有漏洞,危险信号
    加载图片cssjs可无视同源策略
    jsonp:客户端传相关url,服务端将相关信息拼接好后传给客户端。客户端调用定义好的函数处理服务端响应的拼接字符串
    cors:服务端设置
    response.setHeader("Access-Control-Allow-Origin", "url")
    response.setHeader("Access-Control-Allow-Headers", "")
    response.setHeader("Access-Control-Allow-Methods", "")
    接受跨域的cookie
    response.setHeader("Access-Control-Allow-Credentials", "")
    ajax常用插件:jQuery,axios,fetch

存储

cookie:本身用于浏览器和server通讯,被“借用”到本地存储来。键值对。

缺陷

最大存4kb。http请求时需要发送到服务端,增加请求数据量。只能用document.cookie = '' 来修改,太过简陋

localStorage和sessionStorage

HTML5专门为存储而设计,最大可存5m
api简单易用,setItem getItem
不会随着http请求被发送出去
localStorage数据会永久存储。除非代码或手动删除
sessionStorage数据只存在于当前会话,浏览器关闭则会清空

关于开发环境

git
chrome调试工具
抓包
webpack

运行环境

网页加载过程

dns解析: 域名 -> ip地址
浏览器根据ip地址向服务器发起http请求
服务器处理http请求,并返回给浏览器
渲染过程
根据html代码生成domtree
根据css代码生成cssom
将dom tree和cssom整合形成render tree
根据render tree渲染页面
遇到<script>则暂停渲染,优先加载并执行js代码,完成再继续
直至把render tree渲染完成

window.onload 页面的全部资源加载完才会执行,包括图片、视频等
DOMCoententLoaded dom渲染完成即可执行,此时图片、视频可能还没加载完

性能优化

性能优化原则:多使用内存、缓存或其他方法;减少cpu计算量,减少网络加载耗时
让加载更快:减少资源体积,压缩代码;减少访问次数:合并代码,ssr服务器端渲染,缓存
使用更快的网络:cdn
让渲染更快:
css放在head,js放在body最下面
尽早开始执行js,用domcontentloaded触发
懒加载(图片懒加载,上滑加载更多)
对dom查询进行缓存
频繁dom操作,合并到一起插入dom结构
节流throttle防抖debounce
防抖:用户在输入结束或暂停的时候才会触发change事件
节流throttle:拖拽一个元素是,要随时拿到该元素被拖拽的位置。直接用drag事件,则会频繁触发,很容易导致卡顿。节流:无论拖拽速度多块,都会每隔100ms触发一次

安全

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345