【牛客网-前端笔试题】——Javascript专项练习2

个人主页: 小卢要刷力扣题
‍♂️ 作者简介: 大三学生,准备找工作的人儿
推荐一款找工作神器网站: 《牛客网》 |笔试题库|面试经验|实习招聘内推|
⛪ 系列专栏: 《前端面试题》
希望大家多多支持一起进步呀!
如果文章对你有帮助的话,欢迎评论点赞收藏加关注

在这里插入图片描述

文章目录

  • 前言
  • 一、牛客是做什么的?
  • Javascript专项练习


前言

秋招正式批已经到来,相信不少小伙伴在为找工作而烦恼,对自己的实力不太自信,感觉好难找工作,不用怕,下面我来给各位推荐一个知名刷题网站《牛客》

一、牛客是做什么的?

牛客网,是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站。牛客是领先的数字化招聘求职解决方案服务商,牛客向企业提供校园招聘技术人才招聘一站式解决方案服务,主要包括招聘渠道服务(发校招岗位收简历) ,招聘SaaS工具服务(笔、面试 、群面系统 ),招聘传播服务(技术竞赛、广告、线上招聘专场、牛客职播。
牛客网题库中包含几万道题目,主要通过第三方购买和 UGC 的方式获得,牛客网先后尝试了直播和录播课,内容覆盖笔试题解析、面试技巧和机器学习等。

在这里插入图片描述

在里面可以与大家交流最近的面试心得,
如果不知道怎么面试的或者面试技巧掌握得不够牢固的小伙伴可以在牛客里面找面经来看,快速提升自己的面试能力,以更快的找到自己心仪的工作

在这里插入图片描述
在这里插入图片描述

Javascript专项练习

【牛客网-前端笔试题】——Javascript专项练习2_第1张图片

for-in语句,用来枚举person对象的属性。
for-in语句能够枚举对象的自定义属性和原型链属性,而hasOwnProperty只能获取自定义的属性

【牛客网-前端笔试题】——Javascript专项练习2_第2张图片

document.getElementById();
document.getElementsByTagName();
document.getElementsByName();
document.getElementsByClassName();
除了ById是Element,其余都是Elements

【牛客网-前端笔试题】——Javascript专项练习2_第3张图片

/g表示查找所有可能的匹配,返回的结果可以是多个。 如果不加/ g 最多只会匹配一个
数字、大小写字母 => [0-9a-fA-F]
相同时可以简写 #11bbCC | #1bC => {6} | {3}

【牛客网-前端笔试题】——Javascript专项练习2_第4张图片

总的来说就是let定义的i无论循环多少次,下一次再执行循环的时候,i仍然为0;但是var定义的i在下一次循环的时候会变为1覆盖掉之前的0,所以执行延时函数的时候输出为0,1;最后,由于是延时输出的,这个时候循环已经完成了,而由于var覆盖原则,i=2,最后执行函数输出为两个2.

【牛客网-前端笔试题】——Javascript专项练习2_第5张图片

Array 对象方法 方法
concat() 连接两个或更多的数组,并返回结果。
join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 颠倒数组中元素的顺序。
shift() 删除并返回数组的第一个元素
slice() 从某个已有的数组返回选定的元素
sort() 对数组的元素进行排序
splice() 删除元素,并向数组添加新元素。
toSource() 返回该对象的源代码。
toString() 把数组转换为字符串,并返回结果。
toLocaleString() 把数组转换为本地数组,并返回结果。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
valueOf() 返回数组对象的原始值

【牛客网-前端笔试题】——Javascript专项练习2_第6张图片

break除了用于中断循环以及switch语句,还可以用于标签化语句的中断,这里的标签化语句即在一般语句前面多加了xxx:的标签,如果在try或try except块中使用了return,那么这个break将发生于最后一行语句之后,但是却是在return语句之前。所以这里的break是去中断bbb里面的语句,执行完所有的操作后才阻止了return,因此i是增加了,然后继续执行剩下的代码,在输出position2后才返回i变量。

【牛客网-前端笔试题】——Javascript专项练习2_第7张图片

console.log(1+ “2”+“2”);
做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。
因此,这里相当于字符串的合并,即为122.

console.log(1+ +“2”+“2”);
第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +“2"相当于1+2=3.
然后和后面的字符串“2”相合并,变成了字符串"32”.

console.log(“A”- “B”+“2”);
“A”-“B"的运算中,需要先把"A"和"B"用Number函数转换为数值,其结果为NaN,在剪发操作中,如果有一个是NaN,则结果是NaN,因此"A”-"B"结果为NaN。
然后和"2"进行字符串合并,变成了NaN2.

console.log(“A”- “B”+2);
根据上题所述,“A”-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN。

【牛客网-前端笔试题】——Javascript专项练习2_第8张图片

判断一个js对象(arr)是否是Array,最准确的方法:Object.prototype.toString.call(arr) === ‘[object Array]’

【牛客网-前端笔试题】——Javascript专项练习2_第9张图片

function.call(thisArg,args1,args2…)可以调用函数function,并且让函数内部的this指向thisArg,同时传递args1,args2等参数。如果函数处在非严格模式下,且thisArg的值为null或者undefined,则调用时函数内部的this指向window对象,故C选项正确。

【牛客网-前端笔试题】——Javascript专项练习2_第10张图片

NOSCRIPT标签用来定义在脚本未被执行时的替代内容。也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText
noscript:用以在不支持js的浏览器中显示替代的内容,这个元素可以包含能够出现在文档body中任何html元素,script元素除外。包含在noscript元素的内容只有在下列情况下才会显示出来
1.浏览器不支持脚本
2.浏览器支持脚本,但脚本被禁用

【牛客网-前端笔试题】——Javascript专项练习2_第11张图片

C:Promise.prototype.finally(onFinally)添加一个事件处理回调于当前promise对象,并且在原promise对象解析完毕后,返回一个新的promise对象。回调会在当前promise运行完毕后被调用,无论当前promise的状态是完成(fulfilled)还是失败(rejected)。Promise.reject直接就是出错了,后边的finally只是无论前面的promise是否出错都会走的一个新的promise,相当于错误没有处理,那么在控制台上报错了,如果代码改成Promise.reject(123).catch((a)=>{console.log(a)}),或者在finally后面再加一个catch对错误进行手动处理,控制台就不会报错

【牛客网-前端笔试题】——Javascript专项练习2_第12张图片

首先需要明确new方法返回的是构造函数的prototype也就是一个对象,其中直接给对象上不存在的a变量赋值相当于往这个对象添加了一个a变量,因此B可以访问到变量a,但是后续是直接赋值了一个对象,那么原对象就无法感知到了,所以B访问不到新对象的变量b,也因此产生了新旧两个prototype的引用。C的话拿到的是新对象以及往新对象里面新增的d变量

【牛客网-前端笔试题】——Javascript专项练习2_第13张图片

不管是a || b还是a && b,其表达式的返回值要么是a,要么是b,在本题中,flag1和flag2的值只可能是undefined和null中的一个。当使用“===”进行比较时,需要严格区分数据类型,所以flag1 === true的返回结果一定是false,flag2 === false的返回结果也一定是false,故不会有任何输出,D选项正确。

【牛客网-前端笔试题】——Javascript专项练习2_第14张图片

filter的两种使用方法
在模板中使用filter
我们可以直接在{{}}中使用filter,跟在表达式后面用 | 分割,语法如下:
{{ expression | filter }}
也可以多个filter连用,上一个filter的输出将作为下一个filter的输入
{{ expression | filter1 | filter2 | … }}
filter可以接收参数,参数用 : 进行分割,如下:
{{ expression | filter:argument1:argument2:… }}
除了对{{}}中的数据进行格式化,我们还可以在指令中使用filter,例如先对数组array进行过滤处理,然后再循环输出:

<span ng-repeat="a in array | filter ">

在controller和service中使用filter
我们的js代码中也可以使用过滤器,方式就是我们熟悉的依赖注入,例如我要在controller中使用currency过滤器,只需将它注入到该controller中即可,代码如下:

app.controller('testC',function($scope,currencyFilter){
    $scope.num = currencyFilter(123534); 
}

在模板中使用{{num}}就可以直接输出 123 , 534.00 了!在服务中使用 f i l t e r 也是同样的道理。 n g 提供了一个 123,534.00了!在服务中使用filter也是同样的道理。 ng提供了一个 123,534.00了!在服务中使用filter也是同样的道理。ng提供了一个filter服务可以来调用所需的filter,你只需注入一个$filter就够了,使用方法如下:

app.controller('testC',function($scope,$filter){
    $scope.num = $filter('currency')(123534);
$scope.date = $filter('date')(new Date()); 
}

可以达到同样的效果。好处是你可以方便使用不同的filter了。

【牛客网-前端笔试题】——Javascript专项练习2_第15张图片

说一说常见的请求头和相应头都有什么呢?
1)请求(客户端->服务端[request])
GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
Accept: /(客户端能接收的资源类型)
Accept-Language: en-us(客户端接收的语言类型)
Connection: Keep-Alive(维护客户端和服务端的连接关系)
Host: localhost:8080(连接的目标主机和端口号)
Referer: http://localhost/links.asp(告诉服务器我来自于哪里)
User-Agent: Mozilla/4.0(客户端版本号的名字)
Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
Cookie(客户端暂存服务端的信息)
Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

2)响应(服务端->客户端[response])
HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: -1//3种(服务端禁止客户端缓存页面数据)
Cache-Control: no-(服务端禁止客户端缓存页面数据)
Pragma: no-
(服务端禁止客户端缓存页面数据)
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)
在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,解决跨域的一种方法

【牛客网-前端笔试题】——Javascript专项练习2_第16张图片

$emit() 是向上冒泡
$broadcast() 是向下传播事件

【牛客网-前端笔试题】——Javascript专项练习2_第17张图片

首先存在变量提升和函数提升,所以一开始变量a被提升,值为undefined,由于函数提升优先级更高所以a先被赋值为函数。
又因为是立即执行函数所以执行了函数a输出a目前的值(即函数),之后才是被赋值为10.

函数可以在函数体中访问自己的标识符(函数名)
这里面的 a = 20,a 实质上是函数名,log打印的是函数名为a的整个函数体
a=20是修改函数为20,不会在function里面产生额外的变量,但是不能修改,所以此这条语句是无效的,或者你换成b=20就好理解了,这样就会产生全局变量b了。

【牛客网-前端笔试题】——Javascript专项练习2_第18张图片

将对象的方法赋值给变量后,this指向会丢失,所以会去全局环境中找,但此题a是let声明的,,故全局中没有a

【牛客网-前端笔试题】——Javascript专项练习2_第19张图片
【牛客网-前端笔试题】——Javascript专项练习2_第20张图片

【牛客网-前端笔试题】——Javascript专项练习2_第21张图片

A. 正确。obj是用来统计字符数量的,每一个key就是对应的字符,对应的value就是这个字符出现的次数。
C. 错误。max统计的一个字符串中出现次数最多的字符的次数,而key就是这个字符。
B. 错误。因为最后输出的是max和max_key。如果是统计字符串中,所有字符的数量,要对obj所含有的所有属性进行统计。
D. 正确。obj对象进行字符出现次数的统计,循环进行出现次数最多的字符的判断和保存。所以代码实现功能是:判断一个字符串中出现次数最多的字符,统计这个次数

你可能感兴趣的:(前端面试题,javascript,前端,面试)