首页 > 编程 > JavaScript > 正文

前端开发面试题总结之——JAVASCRIPT(二)

2019-11-08 02:28:26
字体:
来源:转载
供稿:网友

http://www.jianshu.com/p/1a20dac12cf6

相关知识点

数据类型、运算、对象、function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、DOM、BOM、内存泄漏、跨域、异步加载、模板引擎、前端MVC、前端MVVM、路由、模块化、Http、Canvas、jQuery、ECMAScript 2015(ES6)、Node.js、AngularJS、Vue、React......

题目&答案

documen.write和 innerHTML的区别(1) navigator.userAgent(2) 不同浏览器的特性,如addEventListenerjavaScript有哪几种数据类型?简单,Number,Boolean,String,Null,Undefined复合,Object,Array,Function截取字符串“abcdefghi”的“fghi”var myvalue=”abcdefghi”;var jiequ=myvalue.substring(myvalue.length-4,myvalue.length);alert(jiequ);-写出下面的运算结果alert(typeof(null)); // objectalert(typeof(undefined)); // undefinedalert(typeof(NaN)); // numberalert(NaN==undefined); // falsealert(NaN==NaN); // falsevar str="123abc";alert(typeof(str++)); // numberalert(str);// NaN问执行完毕后 x, y, z 的值分别是多少?var x = 1, y = z = 0;function add(n) { n = n+1;}y = add(x);function add(n) { n = n + 3;}z = add(x);1、undefined、undefined如何阻止事件的冒泡?//阻止冒泡的方法function stopPP(e){ var evt = e|| window.event; //IE用cancelBubble=true来阻止而FF下需要用stopPRopagation方法 evt.stopPropagation ?evt.stopPropagation() : (evt.cancelBubble=true);}写出程序运行的结果?for(var i=0, j=0; i<10, j<6; i++, j++){ k = i + j;}10编写一个方法 求一个字符串的字节长度/*假设:一个英文字符占用一个字节,一个中文字符占用两个字节*/function getBytes(str){ var len = str.length, bytes = len, i = 0; for(; i<len; i++){ if (str.charCodeAt(i) > 255) bytes++; } return bytes;}alert(getBytes("玩,as"));Javascript中如何对一个对象进行深度clone?function cloneObject(o) { if(!o || 'object' !== typeof o) { return o; } var c = 'function' === typeof o.pop ? [] : {}; var p, v; for(p in o) { if(o.hasOwnProperty(p)) { v = o[p]; if(v && 'object' === typeof v) { c[p] = Ext.ux.clone(v); } else { c[p] = v; } } } return c;};如何控制alert中的换行?/n alert(“p/np”);请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″;function parseQueryString(url){ var params = {}, arr = url.split("?"); if (arr.length <= 1) return params; arr = arr[1].split("&"); for(var i=0, l=arr.length; i<l; i++){ var a = arr[i].split("="); params[a[0]] = a[1]; } return params;}var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2", ps = parseQueryString(url);console.log(ps["key1"]);如何控制网页在网络传输过程中的数据量?function say() { // Local variable that ends up within closure var num = 888; var sayAlert = function() { alert(num); } num++; return sayAlert;}var sayAlert = say();sayAlert();//889请实现ECMAScript 5中的Object.getPrototypeOf() 函数function proto(object) { return !object? null : '__proto__' in object? object.__proto__ : /* not exposed? */ object.constructor.prototype}如何实现Array.prototype.forEach?if (!Array.prototype.forEach) { Array.prototype.forEach = function(fn){ for ( var i = 0; i < this.length; i++ ) { fn( this[i], i, this ); } };}["a", "b", "c"].forEach(function(value, index, array){ assert( value, "Is in position " + index + " out of " + (array.length - 1) );});如何将arguments转为数组?Object.prototype.slice.call(arguments);以下程序运行结果?var ninja = function myNinja(){ alert(ninja == myNinja);};ninja();myNinja();true、报错(error - myNinja is not defined.)如何获取光标的水平位置?function getX(e){ e = e || window.event; //先检查非IE浏览器,在检查IE的位置 return e.pageX || e.clentX + document.body.scrollLeft;}兼容浏览器的获取指定元素(elem)的样式属性(name)的方法function getStyle(elem, name){ if(elem.style[name]){//如果属性存在于style[]中,直接取 return elem.style[name];}else if(elem.currentStyle){//否则 尝试IE的方法 return elem.currentStyle[name];}//尝试W3C的方式else if(document.defaultView && document.defaultView.getComputedStyle){ name = name.replace(/([A-Z])/g, "-$1");//W3C中为textAlign样式,转为text-align name = name.toLowerCase(); var s = document.defaultView.getComputedStyle(elem, ""); return s && s.getPropertyValue(name); }else{ return null; }}Javascript中实现类似PHP的print_r函数function print_r(theObj) { var retStr = ''; if(typeof theObj == 'object') { retStr += '<div style="font-family:Tahoma; font-size:7pt;">'; for(var p in theObj) { if (typeof theObj[p] == 'object') { retStr += '<div><b>['+p+'] => ' + typeof(theObj) + '</b></div>'; retStr += '<div style="padding-left:25px;">' + print_r(theObj[p]) + '</div>'; } else { retStr += '<div>['+p+'] => <b>' + theObj[p] + '</b></div>'; } } retStr += '</div>'; } return retStr;}以下程序运行结果?var b = parseInt("01");alert("b="+b);var c = parseInt("09/08/2009");alert("c="+c);b=1、c=0。以下程序的运行结果?var foo = 'hello';(function() { var foo= foo || 'world'; console.log(foo);})();world如何规避javascript多人开发函数重名问题?(1) 可以开发前规定命名规范,根据不同开发人员开发的功能在函数前加前缀(2) 将每个开发人员的函数封装到类中,调用的时候就调用类的函数,即使函数重名只要类名不重复就行前端开发有哪些优化问题?减少http请求次数:CSSspirit,data uriJS,CSS源码压缩前端模板JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能用setTimeout来避免页面失去响应用hash-table来优化查找当需要设置的样式很多时设置className而不是直接操作style少用全局变量缓存DOM节点查找的结果避免使用CSS Expression图片预载避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢AJAX请求总共有多少种CALLBACKAjax请求总共有八种CallbackonSuccessonFailureonUninitializedonLoadingonLoadedonInteractiveonCompleteonException请给出异步加载js方案,不少于两种异步加载方式:defer,只支持IEasync:创建script,插入到DOM中,加载完毕后callBack,见代码:function loadScript(url, callback){ var script = document.createElement("script") script.type = "text/javascript"; if(script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" ||script.readyState == "complete"){ script.onreadystatechange = null; callback(); } }; } else {//Others: Firefox, Safari, Chrome, and Opera script.onload = function(){ callback(); }; } script.src = url; document.body.appendChild(script);}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表