腾讯一面,被虐。
意识到自己是有多菜,内容明天补充。
以下是还记得的问题内容:
1.cookies的属性有哪些?(这个问题完全不会,之前没了解过cookies。)
比较常见的cookies的属性除了name名称和value值以外,还有下面的4种:
① Expires:过期时间。
值为事件的字符串,指定浏览器可以删除cookie文件的时间。
② Path:路径。
值可以为一个目录,或者一个路径,指定与cookie关联的Web页。
③ Domain:域。
值为域名,这是对path路径属性的延伸,指定与cookie关联的Web服务器或者域。
注意:不能讲cookie域属性设置成与设置它的服务器所在域不同的值。
④ Secure:安全。
值为“secure”或者为空,缺省状态下为空,指定cookie的值通过网络如何在用户和Web服务器之前传输,即是否用https或者其他安全传输协议来传输数据。
注意:只加密与服务器传输过程中的数据,不加密本地保存的cookie文件。
2.JS如何获取当前页面的URL?
这个问题十分基础,无奈当时忘记。
① window.location.url 该方法以字符串的结果返回url的所有内容。
② 类似的方法还有:window.location.protocol、window.location.port、window.location.host、window.location.pathname,分别对面获取协议、端口号、主机名和文件路径。
3.JS事件冒泡?
对冒泡有所了解,但是到面试时要说清楚却遇到困难,归根结蒂还是对冒泡了解不深。
JS事件冒泡是指,在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
很简单,就是子元素上触发事件时,如果没有定义对应的处理程序或者事件返回了true,那么就会发生冒泡,导致事件向父级对象传播,直到被处理,或者到根元素即document对象。
那么应该如何阻止冒泡呢?
根据网上搜索到的内容,总结有以下的几种:
①调用event.stopPropagation()方法
1 <script type="text/javascript"> 2 $(function() { 3 $("#hr_three").click(function(event) { 4 event.stopPropagation(); //阻止事件冒泡
5 }); 6 }); 7 <script>
这个方法会阻止事件冒泡,但不会阻止默认的事件行为。
②给方法增加return false;
<script type="text/javascript"> $(function() { $("#hr_three").click(function(event) { return false; }); }); </script>
这个方法阻止事件冒泡的同时还会阻止默认的事件。
③添加.target的条件
<script type="text/javascript"> $(document).ready(function(){ $('#switcher').click(function(event){ if(event.target==this){ //这里添加一个判定条件 $('#switcher .button').toggleClass('hidden'); } }) }) </script>
④补充event.preventDefault()方法
event.preventDefault()方法不会阻止冒泡,但是会阻止默认的事件行为。
4.JS事件捕获?
待补充
5.从输入url的那一刻起,到浏览器显示页面,中间的过程是怎么样的?
真是TM好问题。
6.时针和分针夹角问题(貌似前端面试必问)
7.JS闭包是怎么样的?
待补充
8.代码或伪代码解释Ajax的工作过程
待补充
9.冒泡排序
用JavaScript完成:
1 function bSort(arr){ 2 var len = arr.length(); 3 for(var i = 0; i < len - 1; i++){ 4 for(var j =0; j < len - 1 -i; j++){ 5 if(arr[j] > arr[j+1]){ 6 var temp = arr[j]; 7 arr[j] = arr[j+1]; 8 arr[j+1] = temp; 9 } 10 } 11 } 12 }
10.正则表达式识别手机号
正则表达式书写如下:
中国电信:1[3578][01379]\d{8}
中国移动:134[012345678]\d{7}或1[34578][012356789]\d{8}
中国联通:1[34578][01256]\d{8}
function IsMobile(text){ var _emp = /^\s*|\s*$/g; text = text.replace(_emp,""); //去掉空格等无关内容
var _d = /^1[3578][01379]\d{8}$/g; var _l = /^1[34578][01256]\d{8}$/g; var _y = /^(134[012345678]\d{7}|1[34578][012356789]\d{8})$/g; if(_d.test(text)){ return 3; //中国电信
} else if(_l.test(text)){ return 2; //中国联通
}else if(_y.test(text)){ return 1; //中国移动
} return 0; }
11.字母大小写转换函数
①toUpperCase():
用法:str.toUpperCase();
返回一个新的字符串,在其中 str 的所有小写字符全部被转换为了大写字符。
②toLowerCase():
用法:str.toLowerCase();
返回一个新的字符串,在其中 str 的所有大写字符全部被转换为了写写字符。
③和toLocaleLowerCase()
toLocaleUpperCase() 用法和返回格式与 toUpperCase() 相同,但是toLocaleUpperCase()方法适应宿主环境的当前区域设置,按照本地方式把字符串转换为大写。只有几种语言(如土耳 其语具)有地方特有的大小写映射,所有该方法的返回值通常与 toUpperCase() 一样。