首页 文章 精选 留言 我的

精选列表

搜索[认证考试],共10003篇文章
优秀的个人博客,低调大师

JavaScript技术专家晋升考试题,敢应战吗?

题库地址:http://javascript-puzzlers.herokuapp.com/ 1. 这段代码的执行结果? vara=Function.length,b=newFunction().lengtha===b 这段代码的执行结果? 答案:false解析:首先new在函数带()时运算优先级和.一样所以从左向右执行newFunction()的函数长度为0巩固:functionfn(){vara=1;}console.log(fn.length)//0fn和newFunction()一样 2. [typeof null, null instanceof Object] 答案:["object",false]解析:null代表空对象指针,所以typeof判断成一个对象。可以说JS设计上的一个BUGinstanceof实际上判断的是对象上构造函数,null是空当然不可能有构造函数巩固:null==undefined//truenull===undefined//flase 3. [ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ] 答案:an error解析:Math.pow(x,y)x的y次幂的值reduce(fn,total)fn(total,currentValue,currentIndex,arr)如果一个函数不传初始值,数组第一个组默认为初始值.[3,2,1].reduce(Math.pow)Math.pow(3,2)//9Math.pow(9,1)//9巩固:[].reduce(Math.pow)//空数组会报TypeError[1].reduce(Math.pow)//只有初始值就不会执行回调函数,直接返回1[].reduce(Math.pow,1)//只有初始值就不会执行回调函数,直接返回1[2].reduce(Math.pow,3)//传入初始值,执行回调函数,返回9 4. 这段代码的执行结果 varval='smtg';console.log('Valueis'+(val==='smtg')?'Something':'Nothing'); 这段代码的执行结果? 答案:Something解析:字符串连接比三元运算有更高的优先级所以原题等价于'Valueistrue'?'Somthing':'Nonthing'而不是'Valueis'+(true?'Something':'Nonthing')巩固:1||fn()&&fn()//11||1?2:3;//2 5. 这段代码的执行结果? varname='World!';(function(){if(typeofname==='undefined'){varname='Jack';console.log('Goodbye'+name);}else{console.log('Hello'+name);}})(); 这段代码的执行结果? 答案:Goodbye Jack解析:(1)typeof时 name变量提升。在函数内部之声明未定义(2)typeof优先级高于===巩固:varstr='World!';(function(name){if(typeofname==='undefined'){varname='Jack';console.log('Goodbye'+name);}else{console.log('Hello'+name);}})(str);答案:Hello World 因为name已经变成函数内局部变量 6. 这段代码的执行结果? varEND=Math.pow(2,53);varSTART=END-100;varcount=0;for(vari=START;i<=END;i++){count++;}console.log(count); 这段代码的执行结果? 答案:other ,不是101解析:js中可以表示的最大整数不是2的53次方,而是1.7976931348623157e+308。2的53次方不是js能表示的最大整数而应该是能正确计算且不失精度的最大整数,巩固:varEND=1234567635;varSTART=END-1024;varc=count=0;for(vari=START;i<=END;i++){c=count++;}console.log(count);//1025console.log(c);//1024 7. 这段代码的执行结果? varary=[0,1,2];ary[10]=10;ary.filter(function(x){returnx===undefined;}); 这段代码的执行结果? 答案:[]解析:filter()不会对空数组进行检测。会跳过那些空元素巩固:varary=[0,1,2,undefined,undefined,undefined,null];ary.filter(function(x){returnx===undefined;});//[undefined,undefined,undefined] 8. 这段代码的执行结果? vartwo=0.2varone=0.1vareight=0.8varsix=0.6[two-one==one,eight-six==two] 这段代码的执行结果? 答案:[true,false]解析:IEEE 754标准中的浮点数并不能精确地表达小数巩固:vartwo=0.2;varone=0.1;vareight=0.8;varsix=0.6;(eight-six).toFixed(4)==two//true 9. 这段代码的执行结果? functionshowCase(value){switch(value){case'A':console.log('CaseA');break;case'B':console.log('CaseB');break;caseundefined:console.log('undefined');break;default:console.log('Donotknow!');}}showCase(newString('A')); 这段代码的执行结果? 答案:Do not know!解析:switch判断的是全等(===),newString(x)是个对象巩固:vara=newString('A');a.__proto__//String.prototype实例的原型指向构造函数的原型对象 10. 这段代码的执行结果? functionshowCase2(value){switch(value){case'A':console.log('CaseA');break;case'B':console.log('CaseB');break;caseundefined:console.log('undefined');break;default:console.log('Donotknow!');}}showCase2(String('A')); 这段代码的执行结果? 答案:Case A解析:String('A')就是返回一个字符串巩固:vara2='A';a2.__proto__//String.prototypea1.__proto__===a2.__proto__//true上一题的a.__proto__那字符串不是对象为啥也指向String.prototype?解析:b是基本类型的值,逻辑上不应该有原型和方法。为了便于操作,有一种特殊的引用类型(基本包装类型)String。其实读取时,后台会自动完成下面的操作:varstr=newString("A");//创建实例str.__proto__;//调用指定属性和方法str=null;//销毁实例所以a1.__proto__===a2.__proto__但注意基本包装类型特殊就在于它对象(str)的生命周期,只存在于一行代码(a1.__proto__=== a2.__proto__)的执行瞬间。这也就解释了为啥字符串也能操作属性和方法但不能添加。基本包装类型有三个(String,Number,Boolean)(详情请看《js高程》5.6基本包类型P119) 11.这段代码的执行结果? functionisOdd(num){returnnum%2==1;}functionisEven(num){returnnum%2==0;}functionisSane(num){returnisEven(num)||isOdd(num);}varvalues=[7,4,'13',-9,Infinity];values.map(isSane); 这段代码的执行结果? 答案:[true,true,true,false,false]解析:%如果不是数值会调用Number()去转化'13'%2//1Infinity%2//NaNInfinity是无穷大-9%2//-1巩固:9%-2//1余数的正负号随第一个操作数 12. 这段代码的执行结果? parseInt(3,8)parseInt(3,2)parseInt(3,0) 这段代码的执行结果? 答案:3 NaN 3解析:2进制不可能有3 13. 这段代码的执行结果? Array.isArray(Array.prototype) 这段代码的执行结果? 答案:true解析:Array.prototype是一个数组数组的原型是数组,对象的原型是对象,函数的原型是函数 14. 这段代码的执行结果? vara=[0];if([0]){console.log(a==true);}else{console.log("wut");} 这段代码的执行结果? 答案:false解析:[0]的boolean值是trueconsole.log(a==true);//转换为数字进行比较,a转换先toString,转化成'0',再Number('0')转化成数值0Number(true)=>1,所有是false 15.[]==[] 答案:false解析:两个引用类型,==比较的是引用地址巩固:[]== ![](1)!的优先级高于==,右边Boolean([])是true,取返等于false(2)一个引用类型和一个值去比较把引用类型转化成值类型,左边0(3)所以0==false答案是true 16. '5'+3'5'-3 这段代码的执行结果? 答案:53 2解析:加号有拼接功能,减号就是逻辑运算巩固:typeof (+"1")//"number"对非数值+—常被用来做类型转换相当于Number() 17. 1 + - + + + - + 1 答案:2解析:+-又是一元加和减操作符号,就是数学里的正负号。负负得正哈。巩固:一元运算符还有一个常用的用法就是将自执行函数的function从函数声明变成表达式。常用的有+-~!void+function(){}-function(){}~function(){}voidfunction(){} 18. 这段代码的执行结果? varary=Array(3);ary[0]=2ary.map(function(elem){return'1';}); 这段代码的执行结果? 答案:["1",empty×2]解析:如过没有值,map会跳过不会执行回调函数 19. 这段代码的执行结果? functionsidEffecting(ary){ary[0]=ary[2];}functionbar(a,b,c){c=10sidEffecting(arguments);returna+b+c;}bar(1,1,1) 这段代码的执行结果? 答案:21,解析:arguments会和函数参数绑定。巩固:但如果es6付给初始值则无法修改,因为es6编译后用了严格模式functionsidEffecting(ary){ary[0]=ary[2];}functionbar(a=1,b,c){c=10sidEffecting(arguments);returna+b+c;}bar(1,1,1)//12这里总结一下:严格模式和非严格模式(1)严格模式arguments对象是传入函数内实参列表的静态副本;非严格模式下,指向同一个值的引用(2)严格模式变量必须先声明,才能使用(3)严格模式中callapply传入nullundefined保持原样不被转换为window 20. 这段代码的执行结果? vara=111111111111111110000,b=1111;a+b; 这段代码的执行结果? 答案:11111111111111111000解析:在JavaScript中number类型在JavaScript中以64位(8byte)来存储。这64位中有符号位1位、指数位11位、实数位52位。2的53次方时,是最大值。其值为:9007199254740992(0x20000000000000)。超过这个值的话,运算的结果就会不对. 21. 这段代码的执行结果? varx=[].reverse;x(); 这段代码的执行结果? 答案:error解析:原来答案是windowx=[].reverse是把reverse函数赋值给xreverse函数处理的是调用它的this比如[1,2,3].reverse()时,它的this是[1,2,3]以前reverse是非严格模式的函数下,没传this会默认为window现在的reverse使用严格模式编写,应该是undefined,所以会报类型转换错误 22.Number.MIN_VALUE > 0 答案:true解析:MIN_VALUE 属性是 JavaScript 中可表示的最小的数(接近0,但不是负数)。它的近似值为5x10-324。 23.[1 < 2 < 3, 3 < 2 < 1] 答案:[true,true]解析:1<2=>true;true<3=>1<3=>true;3<2=>false;false<1=>0<1=>true; 24. 2 == [[[2]]] 答案:true解析:值和引用类型去比较,把引用类型转话成值类型[[[2]]])//2巩固:++[[]][+[]]+[+[]]//"10"(1)(++([[]][+[]]))+[+[]]//运算符权重判断,安利一下第四题下面的文章(2)(++([[]][0]))+[0]//16题中我们讲过+用来做类型转换Number([])===0(3)+([]+1)+[0]//[[]]数组的第0项就是[],++代表自增+1*******注意这一步不是(++[])+[0]这样是错误的**********(4)+([]+1)+[0]//前面+将"1"转成数字1后边,+是拼接"0"所以是字符串"10"这题的详细解释在下面的链接中。高票答案解释的非常赞,推荐阅读 25. 这段代码的执行结果? 3.toString()3..toString()3...toString() 这段代码的执行结果? 答案:error, "3",error解析:因为在 js 中1.1,1.,.1都是合法的数字.那么在解析3.toString的时候这个.到底是属于这个数字还是函数调用呢?只能是数字,因为3.合法啊! 26. 这段代码的执行结果? (function(){varx=y=1;})();console.log(y);console.log(x); 这段代码的执行结果? 答案:1,error解析:y 被赋值成全局变量,等价于y=1;varx=y; 27. 这段代码的执行结果? vara=/123/,b=/123/;a==ba===b 这段代码的执行结果? 答案:false,false解析:正则是对象,引用类型,相等(==)和全等(===)都是比较引用地址 28. 这段代码的执行结果? vara=[1,2,3],b=[1,2,3],c=[1,2,4]a==ba===ba>ca<c 这段代码的执行结果? 答案:false,false,false,true解析:相等(==)和全等(===)还是比较引用地址引用类型间比较大小是按照字典序比较,就是先比第一项谁大,相同再去比第二项。 29. 这段代码的执行结果? vara={},b=Object.prototype;[a.prototype===b,Object.getPrototypeOf(a)===b] 这段代码的执行结果? 答案:false,true解析:Object的实例是a,a上并没有prototype属性a的__poroto__指向的是Object.prototype,也就是Object.getPrototypeOf(a)。a的原型对象是b 30. 这段代码的执行结果? functionf(){}vara=f.prototype,b=Object.getPrototypeOf(f);a===b 这段代码的执行结果? 答案:false解析:a是构造函数f的原型:{constructor:ƒ} b是实例f的原型对象:ƒ(){[native code]} 31. 这段代码的执行结果? functionfoo(){}varoldName=foo.name;foo.name="bar";[oldName,foo.name] 这段代码的执行结果? 答案:["foo","foo"]解析:函数的名字不可变. 32."1 2 3".replace(/\d/g, parseInt) 答案:"1NaN3"解析:replace()回调函数的四个参数:1、匹配项2、与模式中的子表达式匹配的字符串3、出现的位置4、stringObject 本身。如果没有与子表达式匹配的项,第二参数为出现的位置.所以第一个参数是匹配项,第二个参数是位置parseInt('1',0)parseInt('2',2)//2进制中不可能有2parseInt('3',4)巩固:"Andthe%1".replace(/%([1-8])/g,function(match,a,b,d){console.log(match+""+a+""+b+""+d)});//%118Andthe%1 33. 这段代码的执行结果? functionf(){}varparent=Object.getPrototypeOf(f);f.name//?parent.name//?typeofeval(f.name)//?typeofeval(parent.name)//? 这段代码的执行结果? 答案:"f","Empty","function",error解析:f的函数名就是fparent是f原型对象的名字为"",先计算eval(f.name)为f,f的数据类型是functioneval(parent.name)为undefined,"undefined" 34. 这段代码的执行结果? varlowerCaseOnly=/^[a-z]+$/;lowerCaseOnly.test(null),lowerCaseOnly.test()] 这段代码的执行结果? 答案:[true,true]解析:这里 test 函数会将参数转为字符串. 'nul','undefined'自然都是全小写了 35.[,,,].join(",") 答案:",,"解析:因为javascript 在定义数组的时候允许最后一个元素后跟一个,所以这个数组长度是3,巩固:[,,1,].join(".").length//3 36. 这段代码的执行结果? vara={class:"Animal",name:'Fido'};a.class 这段代码的执行结果? 答案:other解析:这取决于浏览器。类是一个保留字,但是它被Chrome、Firefox和Opera接受为属性名。在另一方面,每个人都会接受大多数其他保留词(int,私有,抛出等)作为变量名,而类是VordBoint。 37.var a = new Date("epoch") 答案:other解析:您得到“无效日期”,这是一个实际的日期对象(一个日期的日期为true)。但无效。这是因为时间内部保持为一个数字,在这种情况下,它是NA。在chrome上是undefined正确的是格式是vard=newDate(year,month,day,hours,minutes,seconds,milliseconds); 38. ["1", "2", "3"].map(parseInt) 答案:[1,NaN,NaN]解析:parseInt(val, radix):两个参数,val值,radix基数(就是多少进制转换)map能传进回调函数3参数(element,index,array)parseInt('1',0);//0代表10进制parseInt('2',1);//没有1进制,不合法parseInt('3',2);//2进制根本不会有3巩固:["1","1","11","5"].map(parseInt)//[1,NaN,3,NaN]parseInt('13',2)//1,计算机在二进制只认识0,1,parseInt转换时就当作不认识的字符忽略了parseInt('18str')//1810进制能认识到9parseInt(1/0,19)//181/0==Infinity19进制计算机能认识最后一个字符是i详细解析在下面的链接 39. 这段代码的执行结果? vara=Date(0);varb=newDate(0);varc=newDate();[a===b,b===c,a===c] 这段代码的执行结果? 答案:[false,false,false]解析:当日期被作为构造函数调用时,它返回一个相对于划时代的对象(JAN 011970)。当参数丢失时,它返回当前日期。当它作为函数调用时,它返回当前时间的字符串表示形式。a是字符串a===b//数据类型都不同,肯定是falseb是对象b===c//引用类型,比的是引用地址c也是对象a===c//数据类型都不同,肯定是false巩固:vara=Date(2018);varb=Date(2001);[a===b]//[true]Date()方法获得当日的日期,作为函数调用不需要,返回的同一个字符串"TueJun12201814:36:24GMT+0800(CST)"当然如果a,b执行时间相差1秒则为false 40. 这段代码的执行结果? varmin=Math.min(),max=Math.max()min<max 这段代码的执行结果? 答案:false解析:Math.min不传参数返回Infinity,Math.max不传参数返回-Infinity,Infinity应该大于-Infinity,所以是false巩固:Number.MAX_VALUE>Number.MIN_VALUE//true 41. 这段代码的执行结果? functioncaptureOne(re,str){varmatch=re.exec(str);returnmatch&&match[1];}varnumRe=/num=(\d+)/ig,wordRe=/word=(\w+)/i,a1=captureOne(numRe,"num=1"),a2=captureOne(wordRe,"word=1"),a3=captureOne(numRe,"NUM=2"),a4=captureOne(wordRe,"WORD=2");[a1===a2,a3===a4] 这段代码的执行结果? 答案:[true,false]解析:/g有一个属性叫lastIndex,每次匹配如果没有匹配到,它将重置为0,如果匹配到了,他将记录匹配的位置。我们看一个简单的例子吧。varnumRe=/num=(\d)/g;numRe.test("num=1abcwewe")//truenumRe.lastIndex//5匹配到num=1后在5的索引位置numRe.exec("num=1")//fales这次要从5的索引位置,开始匹配numRe.lastIndex//0上一次匹配失败了numRe.lastIndex重制为0 42. 这段代码的执行结果? vara=newDate("2014-03-19"),b=newDate(2014,03,19);[a.getDay()===b.getDay(),a.getMonth()===b.getMonth()] 这段代码的执行结果? 答案:[false,false]解析:vara=newDate("2014-03-19")//能够识别这样的字符串,返回想要的日期WedMar19201408:00:00GMT+0800(CST)b=newDate(2014,03,19);//参数要按照索引来SatApr19201400:00:00GMT+0800(CST)月是从0索引,日期是从1getDay()是获取星期几getMonth()是获取月份所以都不同巩固:[a.getDate()=== b.getDate()]//true 43. 这段代码的执行结果? if('http://giftwrapped.com/picture.jpg'.match('.gif')){'agiffile'}else{'notagiffile'} 这段代码的执行结果? 答案:'agiffile'解析:String.prototype.match接受一个正则,如果不是,按照newRegExp(obj)转化. 所以 . 并不会转义。那么/gif 就匹配了/.gif/巩固:if('http://giftwrapped.com/picture.jpg'.indexOf('.gif')){'agiffile'}else{'notagiffile'}//indexOf如果匹配不到返回是-1所以是'agiffile' 44.这段代码的执行结果? functionfoo(a){vara;returna;}functionbar(a){vara='bye';returna;}[foo('hello'),bar('hello')] 这段代码的执行结果? 答案:["hello","bye"]解析:最后一题很简单吧,变量声明 本文分享自微信公众号 - JavaScript忍者秘籍(js-obok)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册