每日3题13下面代码执行后,控制台输出什么?Object.prototype.a=1;Function.prototype.b=2;functionF(){}varf=newF();console.log(F.a);console.log(F.b);console.log(f.a);console.log(f.b);14下面代码执行后,控制台输出什么?变量a=2>=3||真&&1||false;console.log(a);15下面代码执行后,控制台输出什么?varx=0;switch(++x){案例0:++x;案例1:++x;案例5:++x;}console.log(x);答案与分析13//answer:121undefined//考察原型链//首先对于Function,这里有几个特殊点console.log(typeofFunction);//functionconsole.log(Function.__proto__===Function.prototype);//真正的控制台。日志(函数.prototype.__proto__===Object.prototype);//true//自己运行,记住结果Object.prototype.a=1;//给原型对象添加属性并赋值Function.prototype.b=2;//同上functionF(){}varf=newF();//看一下原型链,"=>"表示指向console.log(F.a);//F.__proto__=>Function.prototype,Function.prototype.__proto__=>Object.prototype//沿着原型链找到属性a,找到Object.prototype.aas1console.log(F.b);//原型链同上在上方,找到Function.prototype。bis2console.log(f.a);//f.__proto__=>F.prototype//注意F.prototype只是一个普通的对象,所以F.prototype.__proto__=>Object.prototype//沿着找到属性aprototypechain,findObject.prototype.aas1console.log(f.b);//原型链同上,但是找不到属性b,所以结果是undefined//注意原型链的区别f和F14//答案:1//调查&&和||的优先级以及对运算符的理解//&&比||//优先级高所以先计算true&&1console.log(true&&1);//Q:输出结果是什么//答案是1,答案为true对&&的理解有误//forexpr1&&expr2//如果expr1可以转换为true,则表达式返回expr2,否则返回expr1//同理expr1||expr2//如果expr1可以转换为真,表达式返回expr1,否则返回expr2vara=2>=3||真&&1||false;//综上所述,一步一步计算//(2>=3||true&&1||false)//=(2>=3||1||false)//=(1||false)//=1console.log(a);15//Answer:3//考试:switch和++//first++会先计算自增1//没有breakin时case,匹配的case会继续计算,直到遇到breakvarx=0;switch(++x){//先计算括号内的公式:resultis1case0:++x;//1不匹配0case1:++x;//匹配,计算后x为2,没有break,继续向下计算case5:++x;//计算++x,x被计算为3}console.log(x);//所以最后的输出是3
