SEO
的 title
和 alt
有什么区别HTTP
的几种请求方法用途url
到显示页面的步骤html5
有哪些新特性、移除了那些元素?HTML5
的离线储存怎么使用,工作原理能不能解释一下?HTML5
的离线储存资源进行管理和加载的呢cookies
, sessionStorage
和 localStorage
的区别iframe
有那些缺点?WEB
标准以及W3C标准是什么?xhtml
和 html
有什么区别?Doctype
作用? 严格模式与混杂模式如何区分?它们有何意义?void
)元素有那些?行内元素和块级元素有什么区别?HTML
全局属性( global attribute
)有哪些css sprite
是什么,有什么优缺点display: none;
与 visibility: hidden
;的区别link
与 @import
的区别FOUC?
如何避免block formatting context
), BFC
有什么用CSS
样式?css3
有哪些新特性display
有哪些值?说明他们的作用CSS
优先级算法如何计算?BFC
规范的理解?position
的值, relative
和absolute`定位原点是display:inline-block
什么时候不会显示间隙?(携程)PNG,GIF,JPG
的区别及如何选JavaScript
原型,原型链 ? 有什么特点?Javascript
如何实现继承?This
对象的理解new
操作符具体干了什么呢?Ajax
原理JS
的方式有哪些?XML
和 JSON
的区别?webpack
的看法web
安全及防护原理offsetWidth/offsetHeight
, clientWidth/clientHeight
与 scrollWidth/scrollHeight
的区别javascript
有哪些方法定义对象promise
的了解jQuery
源码有哪些写的好的地方Node
的应用场景AMD
、 CMD
的理解web
开发中会话跟踪的方法有哪些js
的基本数据类型js
有哪些内置对象?JavaScript
的基本规范?JavaScript
有几种类型的值?,你能画一下他们的内存图吗?javascript
创建对象的几种方式?eval
是做什么的?null,undefined
的区别?[“1”, “2”, “3”].map(parseInt)
答案是多少?javascript
代码中的 ”use strict”
;是什么意思 ? 使用它区别是什么?JSON
的了解?defer
和 async
attribute
和 property
的区别是什么?ES6
的理解Web
注入攻击,说下原理,最- 常见的两种攻击( XSS
和 CSRF
)了解到什么程度title
、 description
、 keywords
:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面 title
要有所不同; description
把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面 description
有所不同; keywords
列举出重要关键词即可HTML
代码,符合W3C规范:语义化代码让搜索引擎容易理解网页HTML
代码放在最前:搜索引擎抓取 HTML
顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取js
输出:爬虫不会执行js获取内容iframe
:搜索引擎不会抓取 iframe
中的内容alt
的 title
和 alt
有什么区别alt
是
的特有属性,是图片内容的等价描述,用于图片无法加载时显示、读屏器阅读图片。可提图片高可访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析。1、 GET
方法
2、 POST
方法
URL
指定的资源提交数据或附加新的数据3、 PUT
方法
POST
方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而 POST
没有4、 HEAD
方法
5、 DELETE
方法
6、 OPTIONS
方法
URL
所支持的方法。如果请求成功,会有一个 Allow
的头包含类似 “GET,POST”
这样的信息7、 TRACE
方法
TRACE
方法被用于激发一个远程的,应用层的请求消息回路8、 CONNECT
方法
TCP/IP
通道URL
交给 DNS
域名解析,找到真实 IP
,向服务器发起请求;HTML、JS、CSS
、图象等);HTML、JS、CSS
等)进行语法解析,建立相应的内部数据结构(如HTML
的 DOM
);content
方面
HTTP
请求:合并文件、 CSS
精灵、 inline Image
DNS
查询: DNS
缓存、将资源分布到恰当数量的主机名DOM
元素数量Server
方面
CDN
ETag
Gzip
压缩Cookie
方面
cookie
大小css
方面
CSS
表达式
不使用 @import
Javascript
方面
javascript
和 css
从外部引入javascript
和 css
DOM
访问图片方面
css
精灵HTML
中拉伸图片1XX
:信息状态码
100 Continue
继续,一般在发送 post
请求时,已发送了 http header
之后服务端将返回此信息,表示确认,之后发送具体参数信息2XX
:成功状态码
200 OK
正常返回信息201 Created
请求成功并且服务器创建了新的资源202 Accepted
服务器已接受请求,但尚未处理3XX
:重定向
301 Moved Permanently
请求的网页已永久移动到新位置。302 Found
临时性重定向。303 See Other
临时性重定向,且总是使用 GET
请求新的 URI
。304 Not Modified
自从上次请求后,请求的网页未修改过。4XX
:客户端错误
400 Bad Request
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。401 Unauthorized
请求未授权。403 Forbidden
禁止访问。404 Not Found
找不到如何与 URI
相匹配的资源。5XX:
服务器错误
500 Internal Server Error
最常见的服务器端错误。503 Service Unavailable
服务器端暂时无法处理请求(可能是过载或维护)。html
语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;CSS
情况下也以一种文档格式显示,并且是容易阅读的。SEO
。 主要分成两部分:渲染引擎( layout engineer
或 Rendering Engine
)和 JS
引擎
渲染引擎:负责取得网页的内容( HTML
、 XML
、图像等等)、整理讯息(例如加入 CSS
等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核
JS
引擎则:解析和执行 javascript
来实现网页的动态效果JS
引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎HTML5
现在已经不是 SGML
的子集,主要是关于图像,位置,存储,多任务等功能的增加
canvas
video
和 audio
元素localStorage
长期存储数据,浏览器关闭后数据不丢失sessionStorage
的数据在浏览器关闭后自动删除article
、 footer
、 header
、 nav
、 section
calendar
、 date
、 time
、 email
、 url
、 search
webworker
, websocket
, Geolocation
移除的元素:
basefont
, big
, center
, font
, s
, strike,
tt,u`frame
, frameset
, noframes
支持 HTML5
新标签:
IE8/IE7/IE6
支持通过 document.createElement
方法产生的标签持HTML5
新标签 当然也可以直接使用成熟的框架、比如 html5shim
HTML5
的离线储存怎么使用,工作原理能不能解释一下?在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件
原理: HTML5
的离线存储是基于一个新建的 .appcache
文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像 cookie
一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示
如何使用:
manifest
的属性;cache.manifest
文件的编写离线存储的资源window.applicationCache
进行需求实现CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html
HTML5
的离线储存资源进行管理和加载的呢 在线的情况下,浏览器发现 html
头部有 manifest
属性,它会请求 manifest
文件,如果是第一次访问 app
,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过 app
并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest
文件与旧的 manifes
t文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
离线的情况下,浏览器就直接使用离线存储的资源。
cookies
, sessionStorage
和 localStorage
的区别?cookie
是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)sessionStorage
和 localStorage
不会自动把数据发给服务器,仅在本地保存存储大小:
cookie
数据大小不能超过4ksessionStorage
和 localStorage
虽然也有存储大小的限制,但比 cookie
大得多,可以达到5M或更大有期时间:
localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据sessionStorage
数据在当前浏览器窗口关闭后自动删除cookie
设置的 cookie
过期时间之前一直有效,即使窗口或浏览器关闭iframe
会阻塞主页面的 Onload
事件SEO
iframe
和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载iframe
之前需要考虑这两个缺点。如果需要使用 iframe
,最好是通过 javascript
动态给 iframe
添加 src
属性值,这样可以绕开以上两个问题css
和 js
、结构行为表现的分离一个是功能上的差别
XHTML
可兼容各大浏览器、手机以及 PDA
,并且浏览器也能快速正确地编译网页另外是书写习惯的差别
XHTML
元素必须被正确地嵌套,闭合,区分大小写,文档必须拥有根元素link
会同时被加载,而 @imort
页面被加载的时, link
会同时被加载,而 @import
引用的 CSS
会等到页面被加载完再加载 import
只在 IE5
以上才能识别,而 link
是 XHTML
标签,无兼容问题 link
方式的样式的权重 高于 @import
的权重
声明位于文档中的最前面,处于
标签之前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档JS
运作模式是 以该浏览器支持的最高标准运行DOCTYPE
不存在或格式不正确会导致文档以混杂模式呈现a b span img input select strong
div ul ol li dl dt dd h1 h2 h3 h4…p
class
:为元素设置类标识data-*
: 为元素增加自定义属性draggable
: 设置元素是否可拖拽id
: 元素 id
,文档内唯一lang
: 元素内容的的语言style
: 行内 css
样式title
: 元素相关的建议信息 概念:将多个小图片拼接到一个图片中。通过 background-position
和元素尺寸调节需要显示的背景图案。
优点:
HTTP
请求数,极大地提高页面加载速度缺点:
display: none;
与 visibility: hidden;
的区别联系:它们都能让元素不可见
区别:
display:none
;会让元素完全从渲染树中消失,渲染的时候不占据任何空间; visibility: hidden
;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见display: none
;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示 ;visibility: hidden;
是继承属性,子孙节点消失由于继承了 hidden
,通过设置 visibility: visible;
可以让子孙节点显式display
通常会造成文档重排。修改 visibility
属性只会造成本元素的重绘。display: none
;元素内容;会读取 visibility: hidden;
元素内容link
与 @import
的区别link
是 HTML
方式, @import
是CSS方式link
最大限度支持并行下载, @import
过多嵌套导致串行下载,出现 FOUC
link
可以通过 rel="alternate stylesheet"
指定候选样式link
支持早于 @import
,可以使用 @import
对老浏览器隐藏样式@import
必须在样式规则之前,可以在css文件中引用其他文件link
优于 @import
Flash Of Unstyled Content
:用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁。head
创建规则:
float
不是 none
)position
取值为 absolute
或 fixed
)display
取值为 inline-block
, table-cell
, table-caption
, flex
, inline-flex
之一的元素overflow
不是 visible
的元素作用:
margin
折叠display
为 none
,那么 position
和 float
都不起作用,这种情况下元素不产生框position
值为 absolute
或者 fixed
,框就是绝对定位的, float
的计算值为none
, display
根据下面的表格进行调整。float
不是 none
,框是浮动的, display
根据下表进行调整display
根据下表进行调整display
的值为指定值display
clear:both
(缺点,增加无意义的标签)overflow:auto
(使用 zoom:1
用于兼容 IE
,缺点:内部宽高超过父级 div
时,会出现滚动条)afert
伪元素清除浮动( IE8
以上和非 IE
浏览器才支持,目前:大型网站都有使用CSS
初始化往往会出现浏览器之间的页面显示差异。SEO
有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化css
选择器border-radius
text-shadow
transform
p:first-of-type
选择属于其父元素的首个
元素的每个
元素。p:last-of-type
选择属于其父元素的最后
元素的每个
元素。p:only-of-type
选择属于其父元素唯一的
元素的每个
元素。p:only-child
选择属于其父元素的唯一子元素的每个
元素。p:nth-child(2)
选择属于其父元素的第二个子元素的每个
元素。:after
在元素之前添加内容,也可以用来做清除浮动。:before
在元素之后添加内容:enabled
:disabled
控制表单控件的禁用状态。:checked
单选框或复选框被选中block
象块类型元素一样显示。none
缺省值。象行内元素类型一样显示。inline-block
象行内元素一样显示,但其内容象块类型元素一样显示。list-item
象块类型元素一样显示,并添加样式列表标记。table
此元素会作为块级表格来显示inherit
规定应该从父元素继承 display
属性的值IE
盒子模型、 W3C
盒子模型;padding
)、边界( margin
)、 边框( border
);IE
的c ontent
部分把 border
和 padding
计算了进去;!important > id > class > tag
important
比 内联优先级高absolute
:生成绝对定位的元素,相对于 static
定位以外的第一个父元素进行定位fixed
:生成绝对定位的元素,相对于浏览器窗口进行定位relative
:生成相对定位的元素,相对于其正常位置进行定位static
默认值。没有定位,元素出现在正常的流中inherit
规定从父元素继承 position
属性的值margin
负值font-size:0
letter-spacing
word-spacing
GIF
8
位像素, 256
色boolean
透明JPEG
256
PNG
PNG8
和 truecolor PNG
PNG8
类似 GIF
颜色上限为 256
,文件小,支持 alpha
透明度,无动画闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域
闭包的特性:
window
对象即被终止,作用域链向下访问变量是不被允许的prototype
(原型),当我们访问一个对象的属性时prototype
里找这个属性,这 个prototype
又会有自己的 prototype
,于是就这样一直找下去,也就是我们平时所说的原型链的概念instance.constructor.prototype = instance.__proto__
特点:
JavaScript
对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变 当我们需要一个属性的时, Javascript
引擎会先看当前对象中是否有这个属性, 如果没有的
Prototype
对象是否有这个属性,如此递推下去,一直检索到 Object
内建对象Event Delegation
),又称之为事件委托。是 JavaScript
中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能table
上代理所有 td
的 click
事件就非常棒拷贝继承
原型 prototype
机制或 apply
和 call
方法去实现较简单,建议使用构造函数与原型混合方式
functionParent(){
this.name = 'wang';
}
functionChild(){
this.age = 28;
}
Child.prototype = new Parent();//继承了Parent,通过原型
var demo = new Child();
alert(demo.age);
alert(demo.name);//得到被继承的属性
}
this
总是指向函数的直接调用者(而非间接调用者)new
关键字, this
指向 new
出来的那个对象this
指向触发这个事件的对象,特殊的是, IE
中的 attachEvent
中的 this
总是指向全局对象 Window
DOM
事件流:同时支持两种事件模型:捕获型事件和冒泡型事件W3c
中,使用 stopPropagation()
方法;在IE下设置 cancelBubble = true
click -
后的跳转。在 W3c
中,使用 preventDefault()
方法,在 IE
下设置 window.event.returnValue = false
this
变量引用该对象,同时还继承了该函数的原型this
引用的对象中this
所引用,并且最后隐式的返回 this
Ajax
的原理简单来说是在用户和服务器之间加了—个中间层( AJAX
引擎),通过 XmlHttpRequest
对象来向服务器发异步请求,从服务器获得数据,然后用 javascrip
t来操作 DOM
而更新页面。使用户操作与服务器响应异步化。这其中最关键的一步就是从服务器获得请求数据Ajax
的过程只涉及 JavaScript
、 XMLHttpRequest
和 DOM
。 XMLHttpRequest
是 aja
x的核心机制// 1. 创建连接
var xhr = null;
xhr = new XMLHttpRequest()
// 2. 连接服务器
xhr.open('get', url, true)
// 3. 发送请求
xhr.send(null);
// 4. 接受请求
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
success(xhr.responseText);
} else { // fail
fail && fail(xhr.status);
}
}
}
jsonp
、 iframe
、 window.name
、 window.postMessage
、服务器上设置代理页面var module1 = (function(){
var _count = 0;
var m1 = function(){
//...
};
var m2 = function(){
//...
};
return {
m1 : m1,
m2 : m2
};
})();
IE
async
:script
,插入到 DOM
中,加载完毕后 callBack
setTimeout
的第一个参数使用字符串而非函数的话,会引发内存泄漏数据体积方面
JSON
相对 于XML
来讲,数据的体积小,传递的速度更快些。数据交互方面
JSON
与 JavaScript
的交互更加方便,更容易解析处理,更好的数据交互数据描述方面
JSON
对数据的描述性比 XML
较差传输速度方面
JSON
的速度要远远快于 XML
WebPack
是一个模块打包工具,你可以使用 WebPack
管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包 Web
开发中所用到的 HTML
、 Javascript
、 CSS
以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源, webpack
有对应的模块加载器。 webpack
模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源CommonJS
是服务器端模块的规范, Node.js
采用了这个规范。 CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。 AMD
规范则是非同步加载模块,允许指定回调函数AMD
推荐的风格通过返回一个对象做为模块对象, CommonJS
的风格通过对 module.exports
或 exports
的属性赋值来达到暴露模块对象的目的sql
注入原理
SQL
命令插入到 Web
表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令总的来说有以下几点
"-"
进行转换等SQL
或者直接使用存储过程进行数据查询存取hash
掉密码和敏感的信息Xss(cross-site scripting)
攻击指的是攻击者往 Web
页面里插入恶意 html
标签或者 javascript
代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取 cookie
中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点”<”,”>”,”;”,”’”
等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把 html tag
弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击 XSS
是获取信息,不需要提前知道其他用户页面的代码和数据包。 CSRF
是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。要完成一次 CSRF
攻击,受害者必须依次完成两个步骤
登录受信任网站 A
,并在本地生成 Cookie
A
的情况下,访问危险网站 B
CSRF
方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数工厂模式:
new
关键字构造函数模式
this
对象;Iframe
把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过 Javascript
读取到你的表单中 input
中的内容,这样用户名,密码就轻松到手了。offsetWidth/offsetHeight
返回值包含 content + padding + border ,效果与e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含 content + padding ,如果有滚动条,也 不包含滚动条scrollWidth/scrollHeight
返回值包含 content + padding + 溢出内容的尺寸var obj = {};
var obj = new Object();
var obj = Object.create(Object.prototype);
png24
位的图片在iE6浏览器上出现背景,解决方案是做成 PNG8
margin
和 padding
不同。解决方案是加一个全局的 *{margin:0;padding:0;}
来统一,,但是全局效率很低,一般是如下这样解决:body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{
margin:0;
padding:0;
}
IE
下, event
对象有 x
, y
属性,但是没有 pageX
, pageY
属性Firefox
下, event
对象有 pageX
, pageY
属性,但是没有 x,y
属性.依照 Promise/A+
的定义, Promise
有四种状态:
pending:
初始状态, 非 fulfilled
或 rejected.
fulfilled:
成功的操作.
rejected:
失败的操作.
settled: Promise
已被 fulfilled
或 rejected
,且不是 pending
另外, fulfilled
与 rejected
一起合称 settled
Promise
对象用来进行延迟( deferred
) 和异步( asynchronous
) 计算Promise
,最基本的用法如下:var promise = new Promise(function(resolve, reject){
if (...) { // succeed
resolve(result);
} else { // fails
reject(Error(errMessage));
}
});
Promise
实例拥有 then
方法(具有 then
方法的对象,通常被称为 thenable
)。它的使用方法如下:
promise.then(onFulfilled, onRejected)
接收两个函数作为参数,一个在 fulfilled
的时候被调用,一个在 rejected
的时候被调用,接收参数就是 future
, onFulfilled
对应 resolve
, onRejected
对应 reject
jquery
源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,然后通过传入 window
对象参数,可以使 window
对象作为局部变量使用,好处是当 jquery
中访问 window
对象的时候,就不用将作用域链退回到顶层作用域了,从而可以更快的访问window对象。同样,传入 undefined
参数,可以缩短查找 undefined
时的作用域链jquery
将一些原型属性和方法封装在了 jquery.prototype
中,为了缩短名称,又赋值给了jquery.fn
,这是很形象的写法jQuery
将其保存为局部变量以提高访问速度jquery
实现的链式调用可以节约代码,所返回的都是同一个对象,可以提高代码效率 Vue.js
一个用于创建 web
交互界面的库,是一个精简的 MVVM
。它通过双向数据绑定把 View
层和Model
层连接了起来。实际的 DOM
封装和输出格式都被抽象为了 Directives
和 Filters
AngularJS
是一个比较完善的前端 MVVM
框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等所有功能,模板功能强大丰富,自带了丰富的 Angular
指令
react
React
仅仅是 VIEW
层是 facebook
公司。推出的一个用于构建 UI
的一个库,能够实现服务器端的渲染。用了 virtual dom
,所以性能很好。
特点:
Javascript
运行环境Chrome V8
引擎进行代码解释I/O
优点:
缺点:
核CPU
,不能充分利用 CPU
CommonJS
是服务器端模块的规范, Node.js
采用了这个规范。 CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。 AMD
规范则是非同步加载模块,允许指定回调函数
AMD
推荐的风格通过返回一个对象做为模块对象, CommonJS
的风格通过对 module.exports
或 exports
的属性赋值来达到暴露模块对象的目的
setTimeout
的第一个参数使用字符串而非函数的话,会引发内存泄漏cookie
session
url
重写input
ip
地址Undefined
、 Null
、 Boolean
、 Number
、 String
Object
是 JavaScript
中所有对象的父对象Object
、 Array
、 Boolean
、 Number
和 String
Function
、 Arguments
、 Math
、 Date
、 RegExp
、 Error
===/!==
来比较 true/false
或者数值new Array
这种形式Switch
语句必须带有 default
分支If
语句必须使用大括号for-in
循环中的变量 应该使用 var
关键字明确限定作用域,从而避免作用域污Undefined
, Null
, Boolean
, Numbe
r、 String
)stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;heap
)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
javascript
创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用 JSON
;但写法有很多种,也能混合使用
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
function
来模拟无参的构造函数 functionPerson(){}
var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
person.name="Mark";
person.age="25";
person.work=function(){
alert(person.name+" hello...");
}
person.work();
function
来模拟参构造函数来实现(用 this
关键字定义构造的上下文属性)functionPet(name,age,hobby){
this.name=name;//this作用域:当前对象
this.age=age;
this.hobby=hobby;
this.eat=function(){
alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
}
}
var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
maidou.eat();//调用eat方法
var wcDog =new Object();
wcDog.name="旺财";
wcDog.age=3;
wcDog.work=function(){
alert("我是"+wcDog.name+",汪汪汪......");
}
wcDog.work();
function Dog(){
}
Dog.prototype.name="旺财";
Dog.prototype.eat=function(){
alert(this.name+"是个吃货");
}
var wangcai =new Dog();
wangcai.eat();
function Car(name,price){
this.name=name;
this.price=price;
}
Car.prototype.sell=function(){
alert("我是"+this.name+",我现在卖"+this.price+"万元");
}
var camry =new Car("凯美瑞",27);
camry.sell();
JS
代码并运行eval
,不安全,非常耗性能( 2
次,一次解析成 js
语句,一次执行)JSON
字符串转换为JSON对象的时候可以用 eval,var obj =eval('('+ str +')')
undefined
表示不存在这个值。undefined
:是一个表示”无”的原始值或者说表示”缺少值”,就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined
例如变量被声明了,但没有赋值时,就等于 undefined
null
表示一个对象被定义了,值为“空值”
null
: 是一个对象(空对象, 没有任何属性和方法)例如作为函数的参数,表示该函数的参数不是对象;
在验证 null
时,一定要使用 ===
,因为 ==
无法分别 null
和 undefined
[1, NaN, NaN]
因为 parseInt
需要两个参数 (val, radix)
,其中 radix
表示解析时用的基数。map
传了 3
个 (element, index, array)
,对应的 radix
不合法导致解析失败。use strict
是一种 ECMAscript 5
添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使 JS
编码更加规范化的模式,消除 Javascript
语法的一些不合理、不严谨之处,减少一些怪异行为JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式 它是基于 JavaScript
的一个子集。数据格式简单, 易于读写, 占用带宽小
JSON
字符串转换为JSON对象:
var obj =eval('('+ str +')');
var obj = str.parseJSON();
var obj = JSON.parse(str);
JSON
对象转换为JSON字符串:var last=obj.toJSONString();
var last=JSON.stringify(obj);
defer
和 async
、动态创建 DOM
方式(用得最多)、按需异步载入 js
渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容
defer
并行加载 js
文件,会按照页面上 script
标签的顺序执行async
并行加载 js
文件,下载完成立即执行,不会按照页面上 script
标签的顺序执行with
语句this
指向全局对象attribute
是 dom
元素在文档中作为 html
标签拥有的属性;property
就是 dom
元素在 js
中作为对象拥有的属性。html
的标准属性来说, attribute
和 property
是同步的,是会自动更新的JavaScript
提供了简单的字符串插值功能)for-of
(用来遍历数据—例如数组中的值。)arguments
对象可被不定参数和默认参数完美代替。ES6
将p romise
对象纳入规范,提供了原生的 Promise
对象。let
和 const
命令,用来声明变量。let
命令实际上就增加了块级作用域。module
模块的概念// event(事件)工具集,来源:github.com/markyun
markyun.Event = {
// 视能力分别使用dom0||dom2||IE方式 来绑定事件
// 参数: 操作的元素,事件名称 ,事件处理程序
addEvent : function(element, type, handler){
if (element.addEventListener) {
//事件类型、需要执行的函数、是否捕捉
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent('on' + type, function(){
handler.call(element);
});
} else {
element['on' + type] = handler;
}
},
// 移除事件
removeEvent : function(element, type, handler){
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.datachEvent) {
element.detachEvent('on' + type, handler);
} else {
element['on' + type] = null;
}
},
// 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
stopPropagation : function(ev){
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
},
// 取消事件的默认行为
preventDefault : function(event){
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
},
// 获取事件目标
getTarget : function(event){
return event.target || event.srcElement;
}
functionisArray(arg){
if (typeof arg === 'object') {
return Object.prototype.toString.call(arg) === '[object Array]';
}
return false;
}
var arr = [3, 1, 4, 6, 5, 7, 2];
functionbubbleSort(arr){
for (var i = 0; i < arr.length - 1; i++) {
for(var j = 0; j < arr.length - 1; j++) {
if(arr[j + 1] < arr[j]) {
var temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
var arr = [3, 1, 4, 6, 5, 7, 2];
functionquickSort(arr){
if(arr.length == 0) {
return []; // 返回空数组
}
var cIndex = Math.floor(arr.length / 2);
var c = arr.splice(cIndex, 1);
var l = [];
var r = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i] < c) {
l.push(arr[i]);
} else {
r.push(arr[i]);
}
}
return quickSort(l).concat(c, quickSort(r));
}
console.log(quickSort(arr));
functionGetBytes(str){
var len = str.length;
var bytes = len;
for(var i=0; i<len; i++){
if (str.charCodeAt(i) > 255) bytes++;
}
return bytes;
}
alert(GetBytes("你好,as"));
对于传统的网站来说重构通常是:
表格( table
)布局改为 DIV+CSS
使网站前端兼容于现代浏览器(针对于不合规范的 CSS
、如对IE6有效的)
对于移动平台的优化
针对于 SEO
进行优化
前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近
前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
与团队成员, UI
设计,产品经理的沟通;
做好的页面结构,页面重构和用户体验;
为简化用户使用提供技术支持(交互部分)
为多个浏览器兼容性提供支持
为提高用户浏览速度(浏览器性能)提供支持
为跨平台或者其他基于webkit或其他渲染引擎的应用提供支持
为展示数据提供支持(数据接口)
先期团队必须确定好全局样式( globe.css
),编码模式( utf-8
) 等;
编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
页面进行标注(例如 页面 模块 开始和结束);
CSS
跟 HTML
分文件夹并行存放,命名都得统一(例如 style.css
);
JS
分文件夹存放 命名以该 JS
功能为准的英文翻译。
图片采用整合的 images.png png8
格式文件使用 - 尽量整合在一起使用方便将来的管理