1、新增面试题js基础91.documen.write和 innerHTML 的区别?document.write 只能重绘整个页面innerHTML 可以重绘页面的一部分92.哪些操作会造成内存泄漏?内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。2. 闭包3. 控制台日志4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)93.
2、判断一个字符串中出现次数最多的字符,统计这个次数var str = asdfssaaasasasasaa;var json = ;for (var i = 0; i iMax)iMax = jsoni;iIndex = i;alert(出现次数最多的是:+iIndex+出现+iMax+次);94.写一个获取非行间样式的函数function getStyle(obj,attr,value)if(!value)if(obj.currentStyle)return obj.currentStyle(attr);elseobj.getComputedStyle(attr,false);elseobj.
3、styleattr = value;95.事件委托是什么利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!96.闭包是什么,有什么特性,对页面有什么影响当内部函数使用了外部函数的局部变量时, 产生的一个对象(包含了所有使用了的变量)作用: 在函数执行完后, 局部变量还会存在function outer()var num = 1;function inner()var n = 2;alert(n + num);return inner;var r = outer();r();97.解释jsonp的原理,以及为什么不是真正的ajax动态创建script标签,回调函数Ajax是页面无刷
4、新请求数据操作98.字符串反转,如将 12345678 变成 87654321/思路:先将字符串转换为数组 split(),利用数组的反序函数 reverse()颠倒数组,再利用 jion() 转换为字符串var str = 12345678;str = str.split().reverse().join();99.将数字 12345678 转化成 RMB形式 如: 12,345,678/思路:先将数字转为字符, str= str + ;/利用反转函数,每三位字符加一个 ,最后一位不加; re()是自定义的反转函数,最后再反转回去!function re(str) str += ;retur
5、n str.split().reverse().join();function toRMB(num) var tmp=;for (var i = 1; i = re(num).length; i+) tmp += re(num)i - 1;if (i % 3 = 0 & i != re(num).length) tmp += ,;return re(tmp);100.生成5个不同的随机数/思路:5个不同的数,每生成一次就和前面的所有数字相比较,如果有相同的,则放弃当前生成的数字!var num1 = ;for(var i = 0; i 5; i+)num1i = Math.floor(Math
6、.random()*10) + 1; /范围是 1, 10for(var j = 0; j i; j+)if(num1i = num1j)i-;101.去掉数组中重复的数字方法一:/思路:每遍历一次就和之前的所有做比较,不相等则放入新的数组中!/这里用的原型 个人做法;Array.prototype.unique = function()var len = this.length,newArr = ,flag = 1;for(var i = 0; i len; i+, flag = 1)for(var j = 0; j i; j+)if(thisi = thisj)flag = 0; /找到相
7、同的数字后,不执行添加数据flag ? newArr.push(thisi) : ;return newArr;方法二:var arr=1,2,3,3,4,4,5,5,6,1,9,3,25,4;Array.prototype.unique2 = function()var n = ; /一个新的临时数组for(var i = 0; i this.length; i+) /遍历当前数组/如果当前数组的第i已经保存进了临时数组,那么跳过,/否则把当前项push到临时数组里面if (n.indexOf(thisi) = -1) n.push(thisi);return n;var newArr2=a
8、rr.unique2(arr);alert(newArr2); /输出1,2,3,4,5,6,9,25102.阶乘函数/原型方法Number.prototype.N = function()var re = 1;for(var i = 1; i = this; i+)re *= i;return re;var num = 5;alert(num.N();103.window.location.reload() 作用?刷新当前页面。104.下面输出多少?var o1 = new Object();var o2 = o1;o2.name = CSSer;console.log(o1.name);如
9、果不看答案,你回答真确了的话,那么说明你对javascript的数据类型了解的还是比较清楚了。js中有两种数据类型,分别是:基本数据类型和引用数据类型(object Array)。对于保存基本类型值的变量,变量是按值访问的,因为我们操作的是变量实际保存的值。对于保存引用类型值的变量,变量是按引用访问的,我们操作的是变量值所引用(指向)的对象。答案就清楚了: /CSSer;105.a输出多少?var a = 6;setTimeout(function () var a = 666;alert(a); / 输出666,, 1000);因为var a = 666;定义了局部变量a,并且赋值为666,
10、根据变量作用域链,全局变量处在作用域末端,优先访问了局部变量,从而覆盖了全局变量 。var a = 6;setTimeout(function () alert(a); / 输出undefinedvar a = 666;, 1000);因为var a = 666;定义了局部变量a,同样覆盖了全局变量,但是在alert(a);之前,a并未赋值,所以输出undefined。var a = 6;setTimeout(function()alert(a);var a = 66;, 1000);a = 666;alert(a);/ 666, undefined;记住: 异步处理,一切OK 声明提前106
11、.看程序,写结果function setN(obj)obj.name=屌丝;obj = new Object();obj.name = 腐女;var per = new Object();setN(per);alert(per.name); /屌丝 内部107.加减运算alert(5+3); /53 stringalert(5+3); /53 stringalert(5-3); /2 numberalert(5-3); /2 number108.为什么不能定义1px左右的div容器?IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:overflow:hidden | zoom:
12、0.08 | line-height:1px109.结果是什么?function foo()foo.a = function()alert(1);this.a = function()alert(2);a = function()alert(3);var a = function()alert(4);foo.prototype.a = function()alert(5);foo.a = function()alert(6);foo.a(); /6var obj = new foo();obj.a(); /2foo.a(); /1110.输出结果var a = 5;function test(
13、)a = 0;alert(a);alert(this.a); /没有定义 a这个属性var a;alert(a)test(); / 0, 5, 0new test(); / 0, undefined, 0 /由于类它自身没有属性a, 所以是undefined111.结果是:var bool = !2; alert(bool);/true;双向非操作可以把字符串和数字转换为布尔值。112.声明对象,添加属性,输出属性var obj = name: leipeng,showName: function()alert(this.name);obj.showName();113.匹配输入的字符:第一个
14、必须是字母或下划线开头,长度5-20var reg = /a-zA-Z_a-zA-Z0-9_5,20/,name1 = leipeng,name2 = 0leipeng,name3 = 你好leipeng,name4 = hi;alert(reg.test(name1);alert(reg.test(name2);alert(reg.test(name3);alert(reg.test(name4);114.检测变量类型function checkStr(str)return str =string;console.log(checkStr(aaa);115.如何在HTML中添加事件,几种方法
15、?1、标签之中直接添加 onclick=fun();2、JS添加 Eobj.onclick = method;3、绑定事件 IE: obj.attachEvent(onclick, method);FF: obj.addEventListener(click, method, false);116.BOM对象有哪些,列举window对象?1、window对象 ,是JS的最顶层对象,其他的BOM对象都是window对象的属性;2、document对象,文档对象;3、location对象,浏览器当前URL信息;4、navigator对象,浏览器本身信息;5、screen对象,客户端屏幕信息;6、h
16、istory对象,浏览器访问历史信息;117.JS中的简单继承 call方法/定义个父母类,注意:类名都是首字母大写的哦!function Parent(name, money)this.name = name;this.money = money;this.info = function()alert(姓名: +this.name+ 钱: + this.money);/定义孩子类function Children(name)Parent.call(this, name); /继承 姓名属性,不要钱。this.info = function()alert(姓名: +this.name);/实例
17、化类var per = new Parent(parent, 800000000000);var chi = new Children(child);per.info();chi.info();118.bind(), live(), delegate()的区别bind: 绑定事件,对新添加的事件不起作用,方法用于将一个处理程序附加到每个匹配元素的事件上并返回jQuery对象。live: 方法将一个事件处理程序附加到与当前选择器匹配的所有元素(包含现有的或将来添加的)的指定事件上并返回jQuery对象。delegate: 方法基于一组特定的根元素将处理程序附加到匹配选择器的所有元素(现有的或将来的)的一个或多个事件上。119.看下列代码输出什么?var foo = 11+2-1;console.log(foo);console.log(typeof foo);执行完后foo的值为111,foo的类型为Number。120.看下列代码,输出什么?var a = new Object();a.value = 1;b = a;b.value = 2;alert(a.value);执行完后输出结果为2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1