-
Notifications
You must be signed in to change notification settings - Fork 117
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
前端知识体系整理(不断更新) #1
Comments
proto应该是Object.getPrototypeOf({})吧 |
✔️ |
不错 巩固了一些 |
真棒,我还有的学习,谢谢 |
nice |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
——人脑不是机器,记忆都会退化,我们需要文档辅助作知识沉淀
javascript
基本功
语言特性
数据类型:
Undefined
,Null
,Bollean
,Number
,String
Object
、Array
Date
、RegExp
typeof输出(以下六个值之一):
undefined
boolean
string
number
object
function
类型转换:
对象 -> 简单类型(参考JavaScript 类型转换)
valueOf
、再toString
(Date
在+
和==
时优先转化为字串):valueOf
,再toString()
,都不存在则返回NaN
:valueOf()
,再取valueOf()
,都不存在则抛异常:DOM操作(增、删、查、改、移、数据交换)
createElement
,createTextNode
,createDocumentFragment
,appendChild
removeChild
,removeNode
getElementById
,getElementsByTagName
,getElementsByClassName
,querySelector
,querySelectorAll
,parentNode
,firstChild
,lastChild
,nextSibling
,previousSibling
,childNodes
replaceChild
,insertBefore
getAttribute
,setAttribute
,data-x
,jQuery.attr()
,jQuery().prop()
,jQuery().data()
,classList
,innerHTML
,innerText
,textContent
事件机制(IE vs W3C)
事件绑定与解绑:
addEventListener(type, handler, flag)
,attechEvent('on' + type, handler)
,removeEventListener(type, handler)
,detechEvent('on' + type, handler)
事件流:
OOP(原型链、继承。。。)
比较(参考 全面理解面向对象的 JavaScript)
Class
的面向对象,对象由类Class
产生:如Java
、C#
prototype
的OOP,对象由构造器(构造函数)constructor
利用原型prototype
产生生成js对象:
this.city
,在内存里生成了多次prototype
模式:每次实例化只增加私有的对象属性(或方法)到实例中,所有实例的公有属性(或方法)指向同一个内存地址对象的继承
非构造函数的继承:继承可以简单使用对象之间的深、浅拷贝
构造函数的继承:大多是基于原型的继承,但是阅读性差,也不利于扩展
A、B的prototype引用同一个地址,实时上A的prototype.constructor已经被改成了B
构造函数的继承,重要的是理解原型链
prototype chain
,继承基本就是原型链的拷贝或者引用。理解原型链
prototype chain
:_proto属性_:对象的
__proto__
指向Object.prototype
,Function对象的__proto__
指向构造函数的prototype。类式继承:本质上还是使用构造函数的
prototype
,封装成类,典型的例子是jQuery之父_John Resig_的Simple JavaScript Inheritance,其他类库也有各自的实现函数式编程、作用域、闭包、this
执行顺序:解析器会率先读取函数声明,所以在任何代码执行前函数申明可用
arguments, callee, caller, apply, call
arguments
,类数组,类似的还有NodeList、classList等对象arguments.callee
,返回正在执行的Function
对象的一个引用arguments.caller
,返回调用这个Function
对象的Function
对象的引用apply
和call
,传参不同,功能相同,都是把Function
对象绑定到另外一个对象上去执行,其内的this
指向这个对象作用域
var
声明的变量var
申明的变量,会自动升级为全局变量挂到window上var
申明的变量是window对象的一个属性闭包
this:函数中的
this
始终指向函数的调用者这里有一篇详细的例子
Ajax(XMLHttpRequest vs ActiveXObject)
xhr.open()
xhr.send()
xhr.abort()
HTML
的就绪状态:xhr.readyState
xhr.responseText
POST
,GET
,PUT
,DELETE
跨域问题
缺点是如果一个域名下存在安全问题,另一个域名下可能也会有问题,还有就是创建iframe的开销
引入的脚本会立刻执行,存在安全风险
要与远端沟通约定变量,增加了开发和维护成本
iframe嵌套引用,开销更大
会产生历史记录,url中暴露传递的内容
缺点是数据有大小限制
postMessage
跨域通讯jQuery
可阅读yuanyan同学的jQuery编程实践
安全问题
css
性能优化(最佳实践)
HTML优化
html
结构:SEO友好,利于维护html
结构:嵌套过复杂的结构会导致浏览器构建DOM树缓慢html
最小化:html大小直接关系到下载速度,移除内联的css,javascript,甚至模板片,有条件的话尽可能压缩html,去除注释、空行等无用文本img
、link
、script
、iframe
元素的src
或href
属性被设置了,但是属性却为空):部分浏览器依然会去请求空地址@import
引入样式表:IE低版本浏览器会再页面构建好之后再去加载import的样式表,会导致白屏head
里,脚本延后引入CSS优化
\*=
,|=
,^=
,$=
,~=
):正则表达式匹配比基于类别的匹配慢JavaScript优化
DocumentFragement
批量修改,最后再插入文档images
,links
,forms
,document.getElementsByTagName
):缓存NodeList以及NodeList.length的引用
childNodes
,firstChild
不区分元素节点和其他类型节点,但大部分情况下只需要访问元素节点_引自《高性能JavaScript》_):children
代替childNodes
childElementCount
代替childNodes.length
firstElementChild
代替firstChild
这个过程造成了两次的layout,可做如下改造:
repeat
):三个操作都会重新计算元素的几何结构,在部分浏览器可能会导致3次重排,可做如下改写:
可以缓存
$('#box')
到临时变量:Expires
信息Web Worker
jQuery性能优化
合理使用选择器
querySelector
的浏览器很慢$.fn.find
查找子元素,因为find
之前的选择器并没有使用 jQuery 自带的 Sizzle 选择器引擎,而是使用原生API查找元素尽可能的少创建jQuery对象
document.getElementById('el')
比$('#el')
块避免频繁操作DOM
使用事件代理
使用事件代理(委托),当有新元素添加进来的时候,不需要再为它绑定事件,这里有demo可以查看效果。
整体优化
keep-alive
【参考文献】
The text was updated successfully, but these errors were encountered: