1.请用js去除字符串空格
( 1 ) replace正则匹配方法
去除字符串内所有的空格:str = str.replace(/\s*/g,"");
去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,"");
去除字符串内左侧的空格:str = str.replace(/^\s*/,"");
去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
( 2 ) str.trim()方法
trim()方法是用来删除字符串两端的空白字符并返回,trim方法并不影响原来的字符串本身,它返回的是一个新的字符串。
缺陷:只能去除字符串两端的空格,不能去除中间的空格
( 3 ) JQ方法:$.trim(str)方法
$.trim() 函数用于去除字符串两端的空白字符。
注意:$.trim()函数会移除字符串开始和末尾处的所有换行符,空格(包括连续的空格)和制表符。如果这些空白字符在字符串中间时,它们将被保留,不会被移除。
2.jQuery中的delegate函数的作用?
为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数
当点击按钮时,隐藏或显示 p 元素:
$(“div”).delegate(“button”,”click”,function(){ $(“p”).slideToggle(); });3.什么是盒子模型?
所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
4.比较typeof和instanceOf?
相同点:都常用来判断一个变量是否为空,或者是什么类型的。
不同点:
(1)typeof:返回值是一个字符串,用来说明变量的数据类型(number,boolean,string,function,object,undefined)。
用法:
判断一个变量是否存在 If(typeof(a) != “undefined”){ Alert(1); }对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。
( 2 ) instanceOf用于判断一个变量是否属于某个对象的实例。
Var a = new Array(); alert(a instanceof Array); //true alert(a instanceof Object); //true5.什么叫优雅降级和渐进增强?
优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效.渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。
6.Web storage 与cookie相比存在的优势?
存储空间更大:能提供5MB的存储空间(不同浏览器提供的空间不同),Cookie仅4KB。存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一并发送到服务器,这对于本地存储的数据是一种浪费。而Web Storage中的数据则仅仅是存在本地,不会与服务器发生任何交互。更多丰富易用的接口:Web Storage提供了一套更为丰富的接口,使得数据操作更为简便。独立的存储空间:每个域(包括子域)有独立的存储空间,每个存储空间是完全独立的,因此不会造成数据混乱。7.对闭包的理解?
指有权访问另一个函数作用域中的变量的函数. 创建闭包常见方式,就是在一个函数内部创建另一个函数。 function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); //控制台输出1,再输出28.JavaScript中实现继承的方法?
原型继承优点是继承了父类的模板,又继承了父类的原型对象,缺点就是父类实例传参,不是子类实例化传参,不符合常规语言的写法。 // 父类 function Persion(name,age){ this.name = name; this.age = age; } // 父类的原型对象属性 Persion.prototype.id = 10; // 子类 function Boy(sex){ this.sex = sex; } // 继承实现 Boy.prototype = new Persion('c5',27); var b = new Boy(); alert(b.name)// c5 alert(b.id)//102.类继承(借用构造函数的方式继承)优点是方便了子类实例传参,缺点就是不继承了父类的原型对象
// 父类 function Persion(name,age){ this.name = name; this.age = age; } // 父类的原型对象属性 Persion.prototype.id = 10; // 子类 function Boy(name,age,sex){ //call apply 实现继承 Persion.call(this,name,age); this.sex = sex; } var b = new Boy('c5',27,'男'); alert(b.name)// c5 alert(b.id)//undinfind 父类的3.混合继承(原型继承和类继承)优点方便了子类实例传参,缺点就是Boy.pertotype = new Persion() 函数又实例一次,函数内部变量又重复实例一次,大程序时候会很好性能
// 父类 function Persion(name,age){ this.name = name; this.age = age; } // 父类的原型对象属性 Persion.prototype.id = 10; // 子类 function Boy(name,age,sex){ //call apply 实现继承 Persion.call(this,name,age); this.sex = sex; } // 原型继承实现 参数为空 代表 父类的实例和父类的原型对象的关系了 Boy.prototype = new Persion(); var b = new Boy('c5',27,'男'); alert(b.name)// c5 alert(b.id)//109.减少页面加载时间的方法?
减少http请求(合并文件、合并图片)。优化图片文件,减少其尺寸,特别是缩略图,一定要按尺寸生成缩略图然后调用,不要在网页中用resize方法实现,虽然这样看到的图片外形小了,但是其加载的数据量没有减少。(可以采用web图像保存,减少颜色数等等方法)。图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)。压缩JavaScript、css代码。(百度搜索“css代码压缩”)。服务器启用gzip压缩功能:将要传输的文件压缩后传输到客户端再解压,在网络传输数据量会减小。(服务器性能不好的网站,慎用)。标明高度和宽度:方便浏览器给未加载完的图片腾出空位,继续加载后面的内容。网址后面加上“/”:对服务器而言,不加斜杠服务器会多一次判断的过程,加上就会直接返回网站设置的存放在网站根目录下的默认页面。10.什么是跨域,跨域请求资源的方法有哪些?
由于浏览器同源策略,凡是发送请求的url的协议、域名、端口三者之间任意一个与当前页面地址不同就是跨域。存在跨域的情况:
网络协议不同,入http协议访问https协议端口不同,如80端口访问8080端口域名不同,如qianduanblog.com访问baidu.com子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com域名和域名对应的ip不同,如www.a.com访问20.105.28.902.方法
proxy代理定义和用法:proxy代理用于将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。
实现方法:通过nginx代理;
2.CORS 【Cross-Origin Resource Sharing】
定义和用法:是现代浏览器支持跨域资源请求的一种最常用的方式。
使用方法:一般需要后端人员在处理请求数据的时候,添加允许跨域的相关操作。
res.writeHead(200, { "Content-Type": "text/html; charset=UTF-8", "Access-Control-Allow-Origin":'http://localhost', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type' });3.jsonp
定义和用法:通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。
特点:通过情况下,通过动态创建script来读取他域的动态资源,获取的数据一般为json格式。
缺点:1、这种方式无法发送post请求(这里)
2、另外要确定jsonp的请求是否失败并不容易,大多数框架的实现都是结合超时时间来判定。
<script> function testjsonp(data) { console.log(data.name); // 获取返回的结果 } </script> <script> var _script = document.createElement('script'); _script.type = "text/javascript"; _script.src = "http://localhost:8888/jsonp?callback=testjsonp"; document.head.appendChild(_script); </script>11.web前端开发如何提高页面性能优化?
减少http请求(合并CSS、JavaScript、图片)使用浏览器缓存(设置HTTP头中的Cache-Control和Expires属性)服务端启用压缩)Css放在页面最上面、JavaScript放在页面最下面(把JavaScript代码放到</body>标签之前)精简css和js文件(java -jar yuicompressor-2.4.2.jar api.js > api.min.js 和 java -jar yuicompressor-2.4.2.jar style.css > style.min.css)减少对DOM的操作(减少对DOM元素的查询和修改,查询时可将其赋值给局部变量)正确理解Repaint和Reflow(通过设置class样式,position为fixed或者absolute)使用JSON格式进行数据交互减少cookie传输使用CDN加速12.数组去重?
(1) /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; } var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(uniq(aa));(2)
/* * 速度最快, 占空间最多(空间换时间) * * 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。 * 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键, * 不是的话给对象新增该键并放入新数组。 * 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”, * 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"]; * 解决上述问题还是得调用“indexOf”。*/ function uniq(array){ var temp = {}, r = [], len = array.length, val, type; for (var i = 0; i < len; i++) { val = array[i]; type = typeof val; if (!temp[val]) { temp[val] = [type]; r.push(val); } else if (temp[val].indexOf(type) < 0) { temp[val].push(type); r.push(val); } } return r; } var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));13.未完待续。。。