===
运算符判断等的规则javascript有哪些方法定义对象评价一下三种方法实现继承的优缺点,并改进应用程序存储和离线web应用js有多种存储方案,像cookie,userData,Flash,LocalStorage,sessionStorage,globalStorage等,仅IE支持userData,globalStorage是Firefox独有的,而随着HTML5的出现,flash也逐渐退出这个舞台,因此现在的主角只有三个:cookie、LocalStorage、SessionStorage。三者都保存在浏览器端,都有大小限制和同源限制。 它们三个最为明显的区别就是cookie的容量只有4KB,所有浏览器都支持cookie,而另外两个的容量相对来说大很多,通常为5M。 第二点是,cookie会在请求时发送至服务器,作为请求标识,服务器可以修改coolie,而LocalStorage和SessionStorage不会。 第三点就是,因为别人可以分析存储在存放在本地的cookie,进行cookie欺骗,所以相对于另外两种,cookie不是很安全。 所以通常会将登陆信息等重要信息保存在session中,其他信息如果需要保留,则保存在cookie中。 然后是,对于LocalStorage和SessionStorage,两者的区别是SessionStorage是会话式的缓存,关闭页面后数据就会被清除。而LocalStorage是持久性的缓存,除非手动清除,不然数据永远有效,永远都不会被清除。
获取元素的属性通常有两种方式,第一种是取得这个元素后,通过element.getAttribute()方法,把要获取的属性名称传入作为参数,第二种是element.propertyName,得到元素的相应特性值,也就是property,大多数情况下元素的property和attribute的值是一样的,但是毕竟也有一些例外,对于没有对应特性的属性,只能用getAttribute方法。我个人更倾向于用getAttribute()方法,原因有三:一是起码不用刻意去记哪些元素的哪些属性可以用element.propertyName。第二,setAttribute的优势在于他可以修改文档中任意元素的任意属性。最后一点就是,可移植行更好,因为DOM是一种适用于多种环境和多种程序设计语言的通用型API,而element.propertyName只能适用于web文档。
readyState
:表示请求状态的整数,取值: UNSENT(0):对象已创建OPENED(1):open()成功调用,在这个状态下,可以为xhr设置请求头,或者使用send()发送请求HEADERS_RECEIVED(2):所有重定向已经自动完成访问,并且最终响应的HTTP头已经收到LOADING(3):响应体正在接收DONE(4):数据传输完成或者传输产生错误onreadystatechange
:readyState改变时调用的函数status
:服务器返回的HTTP状态码(如,200, 404) statusText
:服务器返回的HTTP状态信息(如,OK,No Content)responseText
:作为字符串形式的来自服务器的完整响应responseXML
: Document对象,表示服务器的响应解析成的XML文档abort()
:取消异步HTTP请求getAllResponseHeaders()
: 返回一个字符串,包含响应中服务器发送的全部HTTP报头。每个报头都是一个用冒号分隔开的名/值对,并且使用一个回车/换行来分隔报头行getResponseHeader(headerName)
:返回headName对应的报头值open(method, url, asynchronous [, user, passWord])
:初始化准备发送到服务器上的请求。method是HTTP方法,不区分大小写;url是请求发送的相对或绝对URL;asynchronous表示请求是否异步;user和password提供身份验证setRequestHeader(name, value)
:设置HTTP报头send(body)
:对服务器请求进行初始化。参数body包含请求的主体部分,对于POST请求为键值对字符串;对于GET请求,为null===
运算符判断等的规则var obj = {};
构造函数: var obj = new Object();
Object.create(): `var obj = Object.create(Object.prototype);方法1:
优点:正确设置原型链实现继承优点:父类实例属性得到继承,原型链查找效率提高,也能为一些属性提供合理的默认值缺点:父类实例属性为引用类型时,不恰当地修改会导致所有子类被修改缺点:创建父类实例作为子类原型时,可能无法确定构造函数需要的合理参数,这样提供的参数继承给子类没有实际意义,当子类需要这些参数时应该在构造函数中进行初始化和设置总结:继承应该是继承方法而不是属性,为子类设置父类实例属性应该是通过在子类构造函数中调用父类构造函数进行初始化方法2:
优点:正确设置原型链实现继承缺点:父类构造函数原型与子类相同。修改子类原型添加方法会修改父类方法3:
优点:正确设置原型链且避免方法1.2中的缺点缺点:ES5方法需要注意兼容性改进:
所有三种方法应该在子类构造函数中调用父类构造函数实现实例属性初始化function Rect() { Shape.call(this);}用新创建的对象替代子类默认原型,设置Rect.prototype.constructor = Rect;
保证一致性第三种方法的polyfill:function create(obj) { if (Object.create) { return Object.create(obj); } function f() {}; f.prototype = obj; return new f();}HTML5新增应用程序缓存,允许web应用将应用程序自身保存到用户浏览器中,用户离线状态也能访问。 1.为html元素设置manifest属性:<html manifest="myapp.appcache">
,其中后缀名只是一个约定,真正识别方式是通过text/cache-manifest
作为MIME类型。所以需要配置服务器保证设置正确 2.manifest文件首行为CACHE MANIFEST
,其余就是要缓存的URL列表,每个一行,相对路径都相对于manifest文件的url。注释以#开头 3.url分为三种类型:CACHE
:为默认类型。NETWORK
:表示资源从不缓存。 FALLBACK
:每行包含两个url,第二个URL是指需要加载和存储在缓存中的资源, 第一个URL是一个前缀。任何匹配该前缀的URL都不会缓存,如果从网络中载入这样的URL失败的话,就会用第二个URL指定的缓存资源来替代。以下是一个文件例子:
雅虎Best Practices for Speeding Up Your Web Site:
content方面
减少HTTP请求:合并文件、CSS精灵、inline Image减少DNS查询:DNS查询完成之前浏览器不能从这个主机下载任何任何文件。方法:DNS缓存、将资源分布到恰当数量的主机名,平衡并行下载和DNS查询避免重定向:多余的中间访问使Ajax可缓存非必须组件延迟加载未来所需组件预加载减少DOM元素数量将资源放到不同的域下:浏览器同时从一个域下载资源的数目有限,增加域可以提高并行下载量减少iframe数量不要404Server方面
使用CDN添加Expires或者Cache-Control响应头对组件使用Gzip压缩配置ETagFlush Buffer EarlyAjax使用GET进行请求避免空src的img标签Cookie方面 减小cookie大小引入资源的域名不要包含cookiecss方面 将样式表放到页面顶部不使用CSS表达式使用不使用@import不使用IE的FilterJavascript方面 将脚本放到页面底部将javascript和css从外部引入压缩javascript和css删除不需要的脚本减少DOM访问合理设计事件监听器图片方面 优化图片:根据实际颜色需要选择色深、压缩优化css精灵不要在HTML中拉伸图片保证favicon.ico小并且可缓存移动方面 保证组件小于25kPack Components into a Multipart Document新闻热点
疑难解答