当前位置: 首页 > news >正文

前端笔试题总结,带答案和解析(一)


1. 执行以下程序,输出结果为()

var x = 10;
var y = 20;
var z = x < y ? x++:++y;
console.log('x='+x+';y='+y+';z='+z);

A x=11;y=21;z=11
B x=11;y=20;z=10
C x=11;y=21;z=10
D x=11;y=20;z=11

初始化x的值为10,y的值为20,x < y返回结果为true,所以执行var z = x++,x++是后置自增,也就是先返回x值,然后再自增加1,所以输出x的值为11,z的值为10,而y值没有改变,仍然是20,B选项正确。


2. typeof Date.now() 的值是:'number'

先执行 Date.now() 得到一个时间戳 typeof 时间戳 =》‘number’


3. 请阅读以下代码
var obj = {};
obj.log = console.log;
obj.log.call(console,this);

该代码在浏览器中执行,输出的日志结果是什么?

A undefined
B window
C console
D obj

obj.log = console.log;//在本行中obj对象中创建了一个函数(即console.log)的引用log,因为是个这个函数的引用如果想要执行可以有两种方法,第一种是后边加(),第二种是使用apply()或者call(),二者第一个参数都是this,接下来的参数apply是参数数组或者是"arguments",而call的参数是直接的参数值
obj.log.call(console,this);//如上所述,call的第二个参数是要被传入obj.log()的参数,这行代码其实可等价于console.log(this),而因为这三行代码都是在global环境下定义的(不是函数中的局部变量),所以this就是window.
至于第一个参数为什么是console而不是this,我觉得console被按照this处理了,我试了试,替换后的执行结果相同


4.执行以下代码,alert的输出结果为()
 var msg = 'hello';
for (var i = 0; i<10; i++){var msg = 'hello' + i * 2 + i;
}
alert(msg);

答案:hello189

解析:在for循环内使用var声明的变量msg并不是局部变量,而是全局变量。在for循环中,每循环一次,变量msg的值就被覆盖一次, 当i=10时不满足i<10,则不执行for里面的逻辑,所以最后一次i=9,最终msg的值为表达式‘hello’ + 9 * 2 + 9的返回结果,根据运算符的优先级,先计算9 * 2,返回结果为18,接着运算hello + 18,返回结果为字符串类型的hello18,最后运算hello18 + 9,返回结果为字符串类型的hello189,故输出结果为hello189,B选项正确。

“hello”+9*2+9
“hello”+18+9
“hello18”+9
“hello189”


5.下列逻辑表达式的结果为false的是()
A NaN == NaN

B null == undefined

C ‘’ == 0

D true == 1

答案:A

解析:
A选项,NaN无论与谁比较,包括它自己,结果都是false,A正确;
B选项,null与undefined使用 ‘ == ’ 比较,结果为true,除此之外,undefined和null与谁比较,结果都为false;
C选项,String与Number比较,先将String转为Number类型,再比较,''转为Number类型的结果为0,故 ‘’ == 0的结果为true;
D选项,Boolean与其他类型比较,Boolean先转为Number类型,true转为Number类型的值为1,故true==1的结果为true。


6.已知arr = [1,2,NaN,1,4,2,NaN],现为输出arr的不重复元素(重复元素只输出一次),则下列程序中的①处,可以作为判断条件的是()

var newArr = [];
for(var i = 0 ;i<arr.length;i++){if(){newArr.push(arr[i]);}
}
console.log(newArr);

A newArr.indexOf(arr[i]) == -1

B !newArr.indexOf(arr[i]) == -1

C newArr.includes(arr[i])

D !newArr.includes(arr[i])

解析:
indexOf()方法与includes()方法的一个重要区别在于indexOf()并不能判断数组的NaN元素,换句话说,不管数组arr是否有NaN元素,arr.indexOf(NaN)返回值都是-1,所以AB选项不能对NaN进行去重,不符合题意;
如果newArr数组不含有arr数组的某个元素,就应该把该元素添加到newArr数组中,如果含有,则不能添加,这样才能达到去重的目的,即newArr.includes(arr[i])返回值为false时,就应该执行if内的语句,所以应该使用“!”对条件取反,D选项符合题意,C选项不符合题意。


7. 执行以下程序,输出结果为()
var one;
var two = null;
console.log(one == two,one === two);

答案:true,false
解析:变量one只声明未赋值,所以其值为undefined,在使用 “ == ” 对undefined和null进行比较时,不能将null和undefined转换成其他任何值,并且规定undefined == null返回结果为true,而使用“ === ”进行比较时,由于“===”需要严格区分数据类型,故undefined === null返回结果为False,A选项正确。


8. 如下代码片段的运行结果是
var obj ={a:1,b:function () {alert(this.a)}}; 
var fun =obj.b; 
fun()

答案:弹出undefined
解析:var b = function(){ alert(this.a); }, obj = { a:1, b:b // 把函数独立出来 }; var fun = obj.b;// 存储的是内存中的地址 fun(); 答案:C 虽然fun是obj.b的一个引用,但是实际上,它引用的是b函数本身,因此此时的fun()其实 是一个不带任何修饰的函数调用,所以this指向window。


9. 下面符合javascript变量定义规则的是?

A _$te$t2
B with
C a bc
D 2a
答案:A
解析: 第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字
B中with是保留字,C中带空格,D不能以数字开头


10 请问以下JS代码会输出什么
var a = 10; 
(function a() {a = 20;console.log(a); 
})()

答案:输出函数a的内容
解析:首先存在变量提升和函数提升,所以一开始变量a被提升,值为undefined,由于函数可以在函数体中访问自己的标识符(函数名),而且函数提升优先级更高所以a先被赋值为函数。
又因为是立即执行函数所以执行了函数a输出a目前的值(即函数),之后才是被赋值为10.


http://www.lryc.cn/news/182830.html

相关文章:

  • LeetCode 202 快乐数
  • 国庆作业day6
  • 李沐深度学习记录4:12.权重衰减/L2正则化
  • 堆--数组中第K大元素
  • ipad使用技巧
  • Windows系统上使用CLion远程开发Linux程序
  • github搜索技巧
  • Python生成器
  • flutter开发实战-使用FutureBuilder异步数据更新Widget
  • 1.2 数据模型
  • 【实用工具】谷歌浏览器插件开发指南
  • 应用层协议——DNS、DHCP、HTTP、FTP
  • XML文件读写
  • Win11 安装 Vim
  • Mac电脑BIM建模软件 Archicad 26 for Mac最新
  • JavaEE-网络编程套接字(UDP/TCP)
  • 微服务技术栈-Gateway服务网关
  • 函数形状有几种定义方式;操作符infer的作用
  • Java / MybatisPlus:JSON处理器的应用,在实体对象中设置对象属性,对象嵌套对象
  • 力扣 -- 1027. 最长等差数列
  • 正则验证用户名和跨域postmessage
  • jsbridge实战1:xcode swift 构建iOS app
  • 零基础部署nginx mysql springboot
  • 6-3 模式匹配
  • SQL JOIN 时 USING 和 ON 的异同
  • 安全学习_开发相关_JNDI介绍(注入)RMILDAP服务
  • C#学生选课及成绩查询系统
  • 【C语言】利用数组处理批量数据(一维数组和二维数组)
  • WPF中, 如何将控件的触发事件绑定到ViewModel
  • 解决Qt msvc编译器 中文显示乱码问题