经典选择题

4,476 阅读12分钟

JavaScript

1、JavaScript中window对象的子对象不包含以下哪个对象?( )

A. document   B. self   C. history   D. message

解析:

选D

window的主对象主要有如下几个:

document   frames   history  location   navigator   screen

window、self、window.self三者是等价的


2、将一个整数序列整理为升序,两趟处理后变为10,12,21,9,7,3,4,25,则采用的排序算法可能Z:( )

A、插入排序

B、快速排序

C、选择排序

D、堆排序

解析:

选C

第一层循环:依次遍历序列当中的每一个元素

第二层循环:将遍历得到的当前元素依次与余下的元素进行比较

符合最小元素的条件,则交换

选择排序的基本思想:比较+交换


3、下边这代码输出的结果是:( )

function showCase(value) {
    switch(value) {
    case 'A':
        console.log('Case A');
        break;
    case 'B':
        console.log('Case B');
        break;
    case undefined:
        console.log('undefined');
        break;
    default:
        console.log('Do not know!');
    }
}
showCase(new String('A'));

A、Case A

B、Case B

C、undefined

D、Do not know!

解析:

选D

此题考查的是关于new string();其中new是一个实例对象,要匹配的也是object, 所以输出结果为Do not know


4、下边这代码输出的结果是( )

var two   = 0.2
var one   = 0.1
var eight = 0.8
var six   = 0.6
console.log([two - one == one, eight - six == two]);

A、[true, true]

B、[false, false]

C、[true, false]

D、other

解析:

选C

这题考的是浮点数计算时精度丢失问题


5、以下代码的执行结果是什么( )

var string = 'string';  
var number = 0;       
var bool = true;     
console.log(number || string);      
console.log(number && string); 
console.log(bool || number);
console.log(bool && number);

A. ‘string’, 0, true,0

B. ‘string’, true,0, 0

C. ‘string’, ‘string’,true, 0

D. ‘string’, 0, true,true

解析:

选A

var string = 'string';               对象为true
var number = 0;                      非零数字为true
var bool = true;                     非空字符串为true
console.log(number || string);         其他为false
console.log(number && string);          
console.log(bool || number);
console.log(bool && number);

6、下面可以匹配的正则表达式是( )

<img src=”http://image.163.com”></img>
A、<img src=”[^”]*”></img>

B、<img src=”[.”]*”></img>

C、<img src=”[^”]*></img>

D、<img src=”[.”]*></img>

解析:

选A

var a='<IMG src="http://image.163.com">'
          var b=/<IMGsrc="[^"]*">/gi          
           var s=a.match(b)                           
		for(var i= 0;i<s.length;i++)             
            {                                         
                      alert(s[i]);
                    alert(RegExp.$1)
               }

7、["1", "2", "3"].map(parseInt) 返回的结果为( )

A:["1", "2", "3"]

B:[1, 2, 3]

C:[0, 1, 2]

D:other

解析:

选D

这题的答案是:[1,NaN,NaN]

该题用到了map与parseInt;parseInt() 函数的语法是parseInt(string, radix);

string 必需。要被解析的字符串。

radix可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN 实际上map里的callback函数接受的是三个参数 分别为元素 下标和数组 回调函数的语法如下所示: function callbackfn(value, index, array1) 可使用最多三个参数来声明回调函数。


8、[typeof null, null instanceof Object]这些类型的结果是( )

A: ["object", false]

B: [null, false]

C: ["object", true]

D: other

解析:

选A

这题考察的是typeof运算符和instanceof运算符

typeof运算符,一些基础类型的结果是:

Undefined "undefined"

Null "object"

Boolean "boolean"

Number "number"

String "string"

Any other object "object"

Array "object"

Null instanceof任何类型都是false

9、下边代码输出的结果是( )

var val = 'smtg';
console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');

A: Value is Something

B: Value is Nothing

C: NaN

D: other

解析:

选D

这题考的是js中的运算符优先级,

这里’+’运算符的优先级要高于’?’

所以val === ‘smtg’实际上就是true

所以结果为’Something’


10、下边代码输出的结果是( )

var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})(); 

A: Goodbye Jack

B: Hello Jack

C: Hello undefined

D: Hello World

解析:

选A

这题考的是js作用域中变量的提升,

js的作用于中使用var定义变量都会被提升到所有代码的最前面,

所以var name目前是undefined,

题目的typeof name === ‘undefined’的结果为true时,就会输出’Goodbye Jack’


11、var arr = [];typeof arr 的结果是( )

A、array

B、function

C、object

D、undefined

解析:

选C

5种简单数据类型(也称基本数据类型):

Undefined、Null、Boolean、Number、String

1种复杂数据类型:Object(基本上除了上述5种,其余都是Object)


12、以下代码执行后,console 的输出是( )

function Foo(){
console.log(this.location);
}
Foo();

A、当前窗口的 Location 对象

B、undefined

C、null

D、TypeError

解析:

选A

这题考的是this的用法

'use strict'条件下,会报TypeError

无'use strict'下,this指向window


13、下列事件哪个不是由鼠标触发的事件()

A、click

B、contextmenu

C、mouseout

D、keydown

解析:

选D

常见的事件:

    1. 点击事件:
        1. onclick:单击事件
        2. ondblclick:双击事件

    2. 焦点事件
        1. onblur:失去焦点
        2. onfocus:元素获得焦点。

    3. 加载事件:
        1. onload:一张页面或一幅图像完成加载。

    4. 鼠标事件:
        1. onmousedown    鼠标按钮被按下。
        2. onmouseup    鼠标按键被松开。
        3. onmousemove    鼠标被移动。
        4. onmouseover    鼠标移到某元素之上。
        5. onmouseout    鼠标从某元素移开。
    5. 键盘事件:
        1. onkeydown    某个键盘按键被按下。    
        2. onkeyup        某个键盘按键被松开。
        3. onkeypress    某个键盘按键被按下并松开。

    6. 选择和改变
        1. onchange    域的内容被改变。
        2. onselect    文本被选中。

    7. 表单事件:
        1. onsubmit    确认按钮被点击。
        2. onreset    重置按钮被点击。

14、如何遍历下面的 my_data 对象?( )

var my_data={a:’Ape’, b:’Banana’, c:’Citronella’};

A、for(var key in my_data) {}

B、foreach(my_data as key=>value) {}

C、for(var i=0;i<my_data.length;i++) {}

D、全不正确

解析:

选A

for in遍历对象所拥有的属性(可枚举的)

由于对象和数组不同,不能用下标来访问,只能用for in遍历


15、如何判断一个js对象是否是Array,arr为要判断的对象,其中最准确的方法是?( )

A、typeof(arr)

B、arr instanceof Array

C、arr.toString==='[object Array]';

D、Object.prototype.toString.call(arr) === '[object Array]';

解析:

选D

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');

解析:

选A

B选项错

选项使用元素选择器,但是 HTML 中没有 us 标签

C选项错

选项使用类选择器,但是删除了类样式后,如何通过类选择器给元素添加样式

D选项错

add() 方法:把元素添加到已存在的元素组合中。

remove() 方法:移除被选元素,包括所有的文本和子节点。


17、下列代码hasOwnProperty的作用是?( )

var obj={}
……..
obj.hasOwnProperty("val")

A、判断obj对象是否具有val属性

B、判断obj对象是否具有val的值

C、判断obj的原型对象是否具有val的属性

D、判断obj的原型对象是否具有val的值

解析:

选A

hasOwnProperty:

是用来判断一个对象是否有你给出名称的属性或对象

isPrototypeOf :

是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。


18、下列不属于javascript内置对象的是( )

A、Math

B、Date

C、RegExp

D、Window

E、Error

解析:

选D

js中的内部对象包括

Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、String以及各种错误类对象,
包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError。

19、javascirpt中的数字在计算机内存储为多少Byte( )

A、2 Byte

B、4Byte

C、8Byte

D、16Byte

解析:

选C

"JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。"

8 Byte = 64bit ;

8个字节,64位


20、以下运行结果( )

for(var i = 0; i < 10; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

A、0--9

B、10个10

C、10个9

D、无限循环

解析:

选B

setTimeout中的闭包函数是每1s执行一次

由于for循环的执行速度远小于1s,

所以当开始执行闭包函数的时候for循环已经结束了(i=10),

之后闭包函数执行十次(因为循环了10次),所以打印了10个10。


21、若需给子scope发送消息,需使用哪个方法( )

A、$emit()

B、$broadcast()

C、$on()

D、$send()

解析:

选B

$broadcast是向下传播事件


22、函数的调用方式有哪些:( )

A、直接调用

B、作为对象方法调用

C、作为构造函数调用

D、通过call和apply方法调用

解析:

选A、B、C、D

cmd-markdown-logo


23、下拉菜单中,用户更改表单元素Select中的值时,就会调用( )事件处理程序

A、onMouseOver

B、onFocus

C、onChange

D、onClick

解析:

选C

切换下拉菜单更改状态用onchange

A选项:鼠标事件

B选项:焦点事件一般是input

C选项:改变状态

D选项:点击事件


24、在ES6规范中,以下类型哪些属于基本数据类型( )

A、String

B、Null

C、Undefined

D、Symbol

解析:

选A、B、C、D

基本数据类型:

Number,String, Null, Undefined,  Boolean,Symbol(es6新增)

引用数据类型:

Object,Function

25、语句var arr=[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)

解析:

选B、C、D

因为传入的数组,所以A选项错误

C选项,Function.call()可以传入任意多个参数,所以C正确

D选项,Function.apply()第二个参数以数组形式传递,所以D正确


26、以下结果里,返回true的是( )

A、!![]

B、1===’1’

C、null===undefined

D、!!’’

解析:

选A

A选项,由于数组属于对象类型,所以空的数组转换成布尔型是true,前置!!,两次取反,返回true。A正确。

B选项,“===”同等于(包含数据类型),左右两端数据类型不同,因此返回false。

C选项,同上,由于左右两端数据类型不同,返回false。

D选项,字符的编码值为0的字符,因此返回false。


27、JavaScript实现继承的方式,不正确的是( )

A、原型链继承

B、构造函数继承

C、组合继承

D、关联继承

解析:

选D

JavaScript实现继承共6种方式:

原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。


28、以下代码执行后,console 的输出是( )

let x = 10;
let foo = () => {
console.log(x);
let x = 20;
x++;
}
foo();)

A、抛出 ReferenceError

B、10

C、20

D、21

解析:

选A

let不存在变量提升,所以没有事先声明。

let块级作用域,所以不会去访问外部的x。

既不会访问外部,又没有事先声明,输出x便会报错


29、关于 this 的工作原理,下面 4 种情况的描述哪一个是错误的?( )

A、在全局范围内,this指向全局对象(浏览器下指window)

B、对象函数调用时,this指向当前对象

C、全局函数调用时,this指向全局函数

D、使用new实例化对象时,this指向新创建的对象

解析:

选C

this有四种情况!

1、当在函数调用的时候指向widow

2、当方法调用的时候指向调用对象

3、当用apply和call上下文调用的时候指向传入的第一个参数

4、构造函数调用指向实例对象

JS中this关键字, 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

全局函数调用时,this指向全局函数; 应该是指向调用全局函数的对象。


30、以下js操作Array的方法中不能添加元素的是:( )

A、push

B、pop

C、unshift

D、splice

解析:

选B

数组.pop(): 删除数组的最后一项,该表达式返回最后一项的数据


31、关于javascript,以下选项描述错误的是( )

A、在原型上扩展的可枚举方法,会被for in循环出来

B、使用object.defineProperty可向对象添加或者修改属性

C、通过hasOwnProperty可判断一个对象以及其原型链上是否具有指定名称的属性

D、原型链是JS实现继承的一种模型

E、每个对象都有prototype属性,返回对象类型原型的引用

F、For循环是按顺序的,for in 循环是不一定按顺序的

解析:

选C

hasOwnProperty方法是用来检测给定的属性是否在当前对象的实例中。


32、关于ES6的使用以下描述错误的是?( )

A、

const a = 1;

const b = 2;

const map = {a, b};

B、

enum TYPE {
OK,
YES
}

C、

class A {
constructor (a) {
this.a = a;
}
}
class AA extends A {
constructor (a, b) {
super(a);
this.b = b;
}
toString () {
return this.a + '' + this.b;
}
}

D、

function* greet(){

yield
"How";

yield
"are";

yield
"you";

}

var greeter = greet();

console.log(greeter.next().value);

console.log(greeter.next().value);

console.log(greeter.next().value);

解析:

选B

es6中将构造方法的function换成了class,

用于与普通函数区分,其中的属性都放在constructor中,

方法在原型中,子类继承采用extends关键字;对于es6中枚举的使用,

只能是以类的方式定义枚举类,不能直接使用enum关键字


33、获取 input 节点的错误方法是( )

<form class="file" name="upload">
<input id="file" name="file" />
</form>

A、document.querySelectorAll('file')[0]

B、document.getElementById('file')[0]

C、document.getElementByTagName('file')[0]

D、document.getElementById('file')

解析:

选A、B、C、D

A选项:应该是 document.querySelectorAll('#file')[0]

B选项:应该是 document.getElementById('file')

C选项:应该是 document.getElementsByTagName('input')[0]

D选项:input标签中就没有class属性


34、下列哪些会返回false( )

A、null

B、undefined

C、0

D、‘0'

解析:

选A、B、C

cmd-markdown-logo


35、以下哪些选项可以将集合A转化为数组( )

A、Array.form(A)

B、[].slice.apply(A)

C、[…A]

D、[].map.call(A, o => o)

解析:

选A、B、C、D

A选项:可以把对象转换成真正的数组

B选项:slice( )方法可从已有的数组中返回选定的元素

C选项:展开运算符,把A集合的元素展开后,用数组[]承载,返回新的数组

D选项:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值


36、js数组的方法中,哪些方法不能改变自身数组( )

A、splice

B、concat

C、sort

D、pop

解析:

选B

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不是

解析:

选D

call, apply方法它们除了第一个参数,即执行时上下文对象相同外,

call方法的其它参数将依次传递给借用的方法作参数,而apply就两个参数,

第二个参数为一个数组传递


38、白屏时间first paint和可交互时间dom ready的关系是( )

A、先触发first paint ,后触发dom ready

B、先触发dom ready,后触发first paint

C、一起触发

D、没关系

解析:

选A

白屏时间(first Paint Time)——用户从打开页面开始到页面开始有东西呈现为止

首屏时间——用户浏览器首屏内所有内容都呈现出来所花费的时间

用户可操作时间(dom Interactive)——用户可以进行正常的点击、输入等操作,默认可以统计domready时间,因为通常会在这时候绑定事件操作

总下载时间——页面所有资源都加载完成并呈现出来所花的时间,即页面 onload 的时间


39、最后一句alert的输出结果是( )

var msg='hello'; 
for (var i=0; i<10; i++)
 { 
   var msg='hello'+i*2+i; 
 }
 alert(msg); 

A、hello

B、hello27

C、hello30

D、hello189

解析:

选D

这里只是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);

解析:

选C

checkState加了( )相当于函数表达式,会立即执行,执行的结果作为返回值传递给settimeout

10 s 应该为 10000

所以选C


41、下列代码得到的结果是( )

console.log(([])?true:false); 
console.log(([]==false?true:false)); 
console.log(({}==false)?true:false)

A、false true true

B、true true false

C、true false true

D、true true true

解析:

选B

Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0
console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);

第一个

([])布尔转换成true

第二个

==相等比较时,允许类型转换

其他类型值和布尔值==比较时,先将布尔值强制转换为对应数字,再进行比较

[]==false

[]==0

[]和数字相等比较时转数字0

0==0

true

第三个

{}==false

{}==0

NaN==0

false

42、JavaScript定义var a="40",var b=7,则执行a%b会得到( )

A、null

B、undefined

C、5

D、"5"

解析:

选C

运算中,+号,数字隐式转换成字符串

其余的运算符号是字符串隐式转换成数字


43、下列关于闭包描述正确的是?( )

A、(function(){})()理论上是一个闭包

B、闭包不耗内存,可以随意使用

C、闭包内变量执行后不会被清除

D、闭包不满足链式作用域结构

解析:

选A、C

逻辑上立即执行函数可以理解为:声明闭包函数-执行-释放内存

闭包内变量要到整个闭包被清除的时候才会清除


44、在ECMAScript6 中,promise的状态有( )

A、Pending

B、Pause

C、Resolved

D、Rejected

解析:

选A、C、D

Promise 对象代表一个异步操作,有3种状态:

Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已完成)’


45、下面有关浏览器中使用js跨域获取数据的描述,说法错误的是( )

A、使用window.name来进行跨域

B、域名、端口相同,协议不同,属于相同的域

C、js可以使用jsonp进行跨域

D、通过修改document.domain来跨子域

解析:

选B

只要 协议、域名、端口有任何一个不同, 都被当作是不同的域


46、下面关于DNS说法正确的是( )

A、DNS协议端口号为53

B、DNS的作用是域名和IP地址的相互映射

C、DNS协议大多数运行在UDP协议之上

D、DNS的默认缓存时间为1小时

解析:

选A、C

A选项:DNS协议默认端口号是53

B选项:DNS就是将域名翻译成IP地址。

C选项:主要用UDP,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输

D:操作系统的DNS缓存:windows DNS缓存的默认值是 MaxCacheTTL,它的默认值是86400s,也就是一天。macOS 严格遵循DNS协议中的TTL。 游览器的DNS缓存:chrome对每个域名会默认缓存60s;IE将DNS缓存30min;Firefox默认缓存时间只有1分钟;Safari约为10S。


47、下面运行结果正确的是( )

var a = {}, b = Object.prototype;
[a.prototype === b, Object.getPrototypeOf(a) === b]

A、other

B、[true, true]

C、[false, false]

D、[false, true]

解析:

选D

这题考的是__proto__和prototype的区别

Object实际上是一个构造函数(typeof Object的结果为"function")

使用字面量创建对象和new Object创建对象是一样的,

所以a.__proto__也就是Object.prototype,

而Object.getPrototypeOf(a)与a.__proto__是一样的,所以第二个结果为true

而实例对象是没有prototype属性的,只有函数才有

所以a.prototype其实是undefined,第一个结果为false


48、下面运行结果正确的是( )

var a = /678/,
    b = /678/;
a == b
a === b

A、other

B、true,true

C、true、false

D、false、false

解析:

选D

JavaScript中的正则表达式依旧是对象,使用typeof运算符就能得出结果:object

运算符左右两边都是对象时,比较他们是否指向同一个对象