当前位置: 首页 > Web前端 > JavaScript

一些JavaScript测验分析

时间:2023-03-27 15:00:54 JavaScript

几个常见面试题的JavaScript小题解析今天,字节跳动数据平台“33000”面试官为大家带来一份JavaScript小题解析。正在准备面试的小伙伴们赶快加入测试吧!!!试题来源:http://perfectionkills.com/ja...建议读者先去上面的链接测试一下分数,再看下面的解析,看看你和作者理解上的差距(字节常驻面试官)1(function(){returntypeofarguments;})();"object""array""arguments""undefined"arguments是类数组对象,所以会返回'object'。arguments有几个注意点:arguments有length属性,但是没有pop,push等其他数组方法,可以用Array.from(arguments)或者[...arguments]转换成真正的arguments大批。箭头函数内没有参数。如果条件允许,优先考虑this对象arguments在严格模式下使用rest参数语法的行为会有一些变化2varf=functiong(){return23;};typeofg();"number""undefined""function"Errorvarf=xx是语句,不是函数表达式,函数表达式的名字只在内部可见,外部的g不存在,所以执行会报错3(function(x){deletex;returnx;})(1);1nullundefinedErrordelete操作符很特别,它可以删除对象的属性,但是不能删除变量,比如varx=1;删除x;//虚假;//1,所以这里的x不能被删除,返回还是1。更多关于delete的细节可以看这里http\://perfectionkills.com/understanding-delete/4vary=1,x=y=typeofx;x;1"number"undefined"undefined"赋予值运算符是从右到左执行的,所以结果是undefined5(functionf(f){returntypeoff();})(function(){return1;});"number""undefined""function"错误这第一题比较简单,看是哪个f就可以了。函数内部的f是传入的参数f,传入的函数执行后返回1,typeof1的结果为number6varfoo={bar:function(){returnthis.baz;},baz:1};(function(){returntypeofarguments[0]();})(foo.bar);"undefined""object""number""function"关键是foo时this的指向.bar被执行。可以先看下面两个结果:varfoo={bar:function(){returnthis.baz;},baz:1};foo.bar();//??varc=foo.bar;c();//??当foo.bar传入执行时,this不再指向foo,所以baz不存在,结果undefined。如果上面的代码是严格模式,情况会有点不同,你可以自己试试7varfoo={bar:function(){returnthis.baz;},baz:1}typeof(f=foo.bar)();"undefined""object""number""function"看完上面的问题,这个就很容易回答了8varf=(functionf(){return"1";},functiong(){return2;})();typeoff;"string""number""function""undefined"这里其实考察的是逗号表达式的取值,而逗号表达式的取值是根据最右边的值,所以结果是number,所以可以正常写代码Handshaking9varx=1;if(functionf(){}){x+=typeoff;}x;1"1function""1undefined"NaN这个问题比较复杂,具体细节需要看规范,简单来说,if中的f声明后就不再存在了,所以结果是"1undefined"10varx=[typeofx,typeofy][1];typeoftypeofx;"number""string""undefined""object"仍然检查逗号表达式,结果很明显11(function(foo){returntypeoffoo.酒吧;})({foo:{酒吧:1}});"undefined""object""number"Error这道题要仔细看,注意不要踩坑,以免答错12(functionf(){functionf(){return1;}returnf();functionf(){return2;}})();12Error(e.g."Toomuchrecursion")undefined这检查变量提升,这是非常简单的13functionf(){returnf;}newf()instanceoff;truefalse这道题考察的是构造函数的返回值。如果构造函数返回的是一个简单的值,比如string、number,那么new之后返回的是一个新的实例,但是如果构造函数返回的是一个对象或者其他函数,那么new之后会返回原来的值,所以结果这里的instanceof显然是获取到的。14具有(函数(x,未定义){})长度;12undefinedError这里考察了2个知识点,with和函数的长度,with语句会将代码的作用域设置为一个具体的对象,而函数的长度就是函数声明时的参数个数,所以答案准备出来\~End