D、全不正确
forin遍历对象所拥有的属性(可枚举的)
由于对象和数组不同,不能用下标来访问,只能用forin遍历
15、如何判断一个js对象是否是Array,arr为要判断的对象,其中最准确的方法是?()
A、typeof(arr)
B、arrinstanceofArray
C、arr.toString==='[objectArray]';
D、Object.prototype.toString.call(arr)==='[objectArray]';
A选项中的typeof(arr)返回的是Object
instanceof在跨frame对象构建的场景下会失效
arr.toString没有这种用法,正确的用法是arr.toString()返回的是数组的内容
16、在很多时候,我们需要给网页中的一些元素不停的切换样式,那么要怎样实现给元素删除一个样式的同时,添加另外一个样式()
A、
$('#ele').removeClass('className');$('#ele').addClass('ClassName');B、
$('us').removeClass('className');$('us').addClass('ClassName');C、
$('.us').removeClass('className');$('.us').addClass('ClassName');D、
$('us').remove('className');$('us').add('ClassName');解析:
B选项错
选项使用元素选择器,但是HTML中没有us标签
C选项错
选项使用类选择器,但是删除了类样式后,如何通过类选择器给元素添加样式
D选项错
add()方法:把元素添加到已存在的元素组合中。
remove()方法:移除被选元素,包括所有的文本和子节点。
17、下列代码hasOwnProperty的作用是?()
varobj={}……..obj.hasOwnProperty("val")A、判断obj对象是否具有val属性
B、判断obj对象是否具有val的值
C、判断obj的原型对象是否具有val的属性
D、判断obj的原型对象是否具有val的值
hasOwnProperty:
是用来判断一个对象是否有你给出名称的属性或对象
isPrototypeOf:
是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
18、下列不属于javascript内置对象的是()
A、Math
B、Date
C、RegExp
D、Window
E、Error
js中的内部对象包括
Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、String以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError。19、javascirpt中的数字在计算机内存储为多少Byte()
A、2Byte
B、4Byte
C、8Byte
D、16Byte
"JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。"
8Byte=64bit;
8个字节,64位
20、以下运行结果()
for(vari=0;i<10;i++){setTimeout(function(){console.log(i);},1000);}A、0--9
B、10个10
C、10个9
D、无限循环
setTimeout中的闭包函数是每1s执行一次
由于for循环的执行速度远小于1s,
所以当开始执行闭包函数的时候for循环已经结束了(i=10),
之后闭包函数执行十次(因为循环了10次),所以打印了10个10。
21、若需给子scope发送消息,需使用哪个方法()
A、$emit()
B、$broadcast()
C、$on()
D、$send()
$broadcast是向下传播事件
22、函数的调用方式有哪些:()
A、直接调用
B、作为对象方法调用
C、作为构造函数调用
D、通过call和apply方法调用
23、下拉菜单中,用户更改表单元素Select中的值时,就会调用()事件处理程序
A、onMouseOver
B、onFocus
C、onChange
D、onClick
切换下拉菜单更改状态用onchange
A选项:鼠标事件
B选项:焦点事件一般是input
C选项:改变状态
D选项:点击事件
24、在ES6规范中,以下类型哪些属于基本数据类型()
A、String
B、Null
C、Undefined
D、Symbol
基本数据类型:
Number,String,Null,Undefined,Boolean,Symbol(es6新增)引用数据类型:
Object,Function25、语句vararr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正确的是哪几项?()
A、Math.max(arr)
B、Math.max(arr[0],arr[1],arr[2],arr[3])
C、Math.max.call(Math,arr[0],arr[1],arr[2],arr[3])
D、Math.max.apply(Math,arr)
因为传入的数组,所以A选项错误
C选项,Function.call()可以传入任意多个参数,所以C正确
D选项,Function.apply()第二个参数以数组形式传递,所以D正确
26、以下结果里,返回true的是()
A、!![]
B、1===’1’
C、null===undefined
D、!!’’
A选项,由于数组属于对象类型,所以空的数组转换成布尔型是true,前置!!,两次取反,返回true。A正确。
B选项,“===”同等于(包含数据类型),左右两端数据类型不同,因此返回false。
C选项,同上,由于左右两端数据类型不同,返回false。
D选项,字符的编码值为0的字符,因此返回false。
27、JavaScript实现继承的方式,不正确的是()
A、原型链继承
B、构造函数继承
C、组合继承
D、关联继承
JavaScript实现继承共6种方式:
原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。
28、以下代码执行后,console的输出是()
letx=10;letfoo=()=>{console.log(x);letx=20;x++;}foo();)A、抛出ReferenceError
B、10
C、20
D、21
let块级作用域,所以不会去访问外部的x。
29、关于this的工作原理,下面4种情况的描述哪一个是错误的?()
A、在全局范围内,this指向全局对象(浏览器下指window)
B、对象函数调用时,this指向当前对象
C、全局函数调用时,this指向全局函数
D、使用new实例化对象时,this指向新创建的对象
this有四种情况!
1、当在函数调用的时候指向widow
2、当方法调用的时候指向调用对象
3、当用apply和call上下文调用的时候指向传入的第一个参数
4、构造函数调用指向实例对象
JS中this关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
全局函数调用时,this指向全局函数;应该是指向调用全局函数的对象。
30、以下js操作Array的方法中不能添加元素的是:()
A、push
B、pop
C、unshift
D、splice
数组.pop():删除数组的最后一项,该表达式返回最后一项的数据
31、关于javascript,以下选项描述错误的是()
A、在原型上扩展的可枚举方法,会被forin循环出来
B、使用object.defineProperty可向对象添加或者修改属性
C、通过hasOwnProperty可判断一个对象以及其原型链上是否具有指定名称的属性
D、原型链是JS实现继承的一种模型
E、每个对象都有prototype属性,返回对象类型原型的引用
F、For循环是按顺序的,forin循环是不一定按顺序的
hasOwnProperty方法是用来检测给定的属性是否在当前对象的实例中。
32、关于ES6的使用以下描述错误的是?()
consta=1;constb=2;constmap={a,b};B、
enumTYPE{OK,YES}C、
classA{constructor(a){this.a=a;}}classAAextendsA{constructor(a,b){super(a);this.b=b;}toString(){returnthis.a+''+this.b;}}D、
function*greet(){yield"How";yield"are";yield"you";}vargreeter=greet();console.log(greeter.next().value);console.log(greeter.next().value);console.log(greeter.next().value);解析:
es6中将构造方法的function换成了class,
用于与普通函数区分,其中的属性都放在constructor中,
方法在原型中,子类继承采用extends关键字;对于es6中枚举的使用,
只能是以类的方式定义枚举类,不能直接使用enum关键字
33、获取input节点的错误方法是()
A、document.querySelectorAll('file')[0]
B、document.getElementById('file')[0]
C、document.getElementByTagName('file')[0]
D、document.getElementById('file')
A选项:应该是document.querySelectorAll('#file')[0]
B选项:应该是document.getElementById('file')
C选项:应该是document.getElementsByTagName('input')[0]
D选项:input标签中就没有class属性
34、下列哪些会返回false()
A、null
C、0
D、‘0'
35、以下哪些选项可以将集合A转化为数组()
A、Array.form(A)
B、[].slice.apply(A)
C、[…A]
D、[].map.call(A,o=>o)
A选项:可以把对象转换成真正的数组
B选项:slice()方法可从已有的数组中返回选定的元素
C选项:展开运算符,把A集合的元素展开后,用数组[]承载,返回新的数组
D选项:map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
36、js数组的方法中,哪些方法不能改变自身数组()
A、splice
B、concat
C、sort
D、pop
splice删除数据会改变数组
concat连接数组但是不改变院数组
sort排序会改变数组
pop出栈返回最后一个最后一个元素,改变数组
37、下面有关JavaScript中call和apply的描述,错误的是()
A、call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
B、apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入
C、call传入的则是直接的参数列表。call方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。
D、两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是
call,apply方法它们除了第一个参数,即执行时上下文对象相同外,
call方法的其它参数将依次传递给借用的方法作参数,而apply就两个参数,
第二个参数为一个数组传递
A、先触发firstpaint,后触发domready
B、先触发domready,后触发firstpaint
C、一起触发
D、没关系
39、最后一句alert的输出结果是()
varmsg='hello';for(vari=0;i<10;i++){varmsg='hello'+i*2+i;}alert(msg);A、hello
B、hello27
C、hello30
D、hello189
这里只是for循环不是函数,
因此for内部定义的msg与for外部定义的msg为在同一块作用域,为同一个变量。
输出hello189
hello+9*2+9
40、要在10秒后调用checkState,下列哪个是正确的()
A、window.setTimeout(checkState,10);
B、window.setTimeout(checkState(),10);
C、window.setTimeout(checkState,10000);
D、window.setTimeout(checkState(),10000);
checkState加了()相当于函数表达式,会立即执行,执行的结果作为返回值传递给settimeout
10s应该为10000
所以选C
41、下列代码得到的结果是()
console.log(([])true:false);console.log(([]==falsetrue:false));console.log(({}==false)true:false)A、falsetruetrue
B、truetruefalse
C、truefalsetrue
D、truetruetrue
Boolean([]);//trueNumber([]);//0Number({});//NaNNumber(false);//0console.log(([])true:fasle);//=>console.log((true)true:false);console.log([]==falsetrue:false);//=>console.log(0==0true:false);console.log(({}==false)true:false);//=>console.log((NaN==0)true:false);第一个
([])布尔转换成true第二个
==相等比较时,允许类型转换其他类型值和布尔值==比较时,先将布尔值强制转换为对应数字,再进行比较[]==false[]==0[]和数字相等比较时转数字00==0true第三个
{}==false{}==0NaN==0false42、JavaScript定义vara="40",varb=7,则执行a%b会得到()
C、5
D、"5"
运算中,+号,数字隐式转换成字符串
其余的运算符号是字符串隐式转换成数字
43、下列关于闭包描述正确的是?()
A、(function(){})()理论上是一个闭包
B、闭包不耗内存,可以随意使用
C、闭包内变量执行后不会被清除
D、闭包不满足链式作用域结构
闭包内变量要到整个闭包被清除的时候才会清除
44、在ECMAScript6中,promise的状态有()
A、Pending
B、Pause
C、Resolved
D、Rejected
Promise对象代表一个异步操作,有3种状态:
Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已完成)’
45、下面有关浏览器中使用js跨域获取数据的描述,说法错误的是()
A、使用window.name来进行跨域
B、域名、端口相同,协议不同,属于相同的域
C、js可以使用jsonp进行跨域
D、通过修改document.domain来跨子域
只要协议、域名、端口有任何一个不同,都被当作是不同的域
46、下面关于DNS说法正确的是()
A、DNS协议端口号为53
B、DNS的作用是域名和IP地址的相互映射
C、DNS协议大多数运行在UDP协议之上
A选项:DNS协议默认端口号是53
B选项:DNS就是将域名翻译成IP地址。
C选项:主要用UDP,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输
47、下面运行结果正确的是()
vara={},b=Object.prototype;[a.prototype===b,Object.getPrototypeOf(a)===b]A、other
B、[true,true]
C、[false,false]
D、[false,true]
这题考的是__proto__和prototype的区别
Object实际上是一个构造函数(typeofObject的结果为"function")
使用字面量创建对象和newObject创建对象是一样的,
所以a.__proto__也就是Object.prototype,
而Object.getPrototypeOf(a)与a.__proto__是一样的,所以第二个结果为true
而实例对象是没有prototype属性的,只有函数才有
所以a.prototype其实是undefined,第一个结果为false
48、下面运行结果正确的是()
vara=/678/,b=/678/;a==ba===bA、other
B、true,true
C、true、false
D、false、false
JavaScript中的正则表达式依旧是对象,使用typeof运算符就能得出结果:object