Javascript专项练习-选择题(更新中)

编程语言-Javascript专项练习

2020.4.19 : 1-35
2020.4.20:36-58

1. 以下语句的执行结果是什么?
console.log('one');
setTimeout(function(){
	console.log('two');
},0);
console.log('three');
console.log('four');

答案:“one” “three” “four” “two”
解析:回调时,被回调的函数会被放在event loop里,等待线程里的任务执行完后才执行event loop里的代码。 因此,上述代码会先把线程里的执行完后,再执行event loop里的setTimeout函数。


2. 以下语句的执行结果是什么?
for(var i = 0; i < 10; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

答案:10个10
解析:同第1题的思路,setTimeout是异步操作,setTimeout的第一个参数(函数)会在所有的线程执行完成后再执行,for最后一次循环,在程序体里面 i = 9 , i < 10 ; i++(10) ,在循环结束之后,i = 10,这时候开始执行event loop。


.

答案:
解析


3. x={x:1};y={y:1};z=1;n='1’下面结果为true的是?

A. x === y
B. x == y
C. z === n
D. z == n
答案: D
解析

  • x,y是对象,对象是否相等要看对象是否指向同一个地址。每一个{ }都会开辟一个新的地址空间,因此x,y不相等也不恒等。
  • 对于变量而言,== 在运算时会进行隐式转换,而 === 不会进行数据类型转换,所以数字类型的1和字符类型的1,会在转换下得到true,在===的计算下为false。

4. 下面哪些语句可以 在JS里判断一个对象oStringObject是否为String?

A. oStringObject instanceof String
B. typeof oStringObject == ‘string’
C. oStringObject is String
D. 以上答案都不正确

答案: A
解析

  • JS 中值的类型分为原始值类型对象类型原始值类型包括 number, string, boolean, null 和 undefined引用类型对象类型,包括object,Array,RegExp,Date,Function,特殊的基本包装类型(String、Number、Boolean)。首先原始值类型它就不是对象。
  • 另外,要注意 ‘hello’new String(‘hello’) 的区别,前者是字符串字面值,属于原始类型,而后者是对象。用 typeof 运算符返回的值也是完全不一样的:
typeof 'hello';  // 'string'
typeof new String('hello');  // 'object'
  • 一般判断一个对象的类型使用typeof,特殊在new String的情况下的结果会是object=new 出来的都是object,此时需要通过instanceof来判断。

5. angularjs1中服务的正确写法是?

A. ng-service
B. ng-server
C. ng-command
D. ng-class

答案: A
解析:字面意思,service是服务的意思。


6. flash和js通过什么类如何交互?

A. ExtensionContex
B. ExternalInterface
C. IInterpolator
D. FlexContentHolder
答案: B
解析

  • Flash提供了ExternalInterface接口与JavaScript通信,ExternalInterface有两个方法,calladdCallback

  • ExternalInterface.addCallback(“在js里可调用的flash方法名”,flash内方法) //在flash中通过这个方法公开 在js中可调用的flash内的方法;

  • ExternalInterface.call(“js方法”,传给js的参数) //在flash里调用js里的方法


7. 代码执行后,foo的值为( )
var foo = "10"+3-"1";
console.log(foo);

A. “102”
B. 102
C. 12
D. “12”
答案: B
解析

  • 对于 + 来说,有两个含义:第一个含义是做字符串拼接,第二个含义是加减法中的加法
    (1)如果操作数里有一个字符串,其他的值将被转换成字符串,一律进行字符串拼接
    (2)其他情况,操作数转换成数字执行加法运算。
  • 对于 - 来说,只有一个减法含义,即使操作数有字符串,也会自动转化成数值进行减法运算

8. 分析下面代码,对于该段代码分析说法正确的是?
<html>
<body>
 <div id="ele" class="div">
 <span id="s1" class="sp" lang="zh-cn">
 </span>
 </div>
</body>
<script type="text/javascript">  
 function exct() {
    var oEle = document.getElementById("ele");
    var child = oEle.children;
    console.log("ele.children的执行结果是:");
    for(i = 0; i < child.length; i++){
       console.log(child[i].tagName);
    }  
    child = oEle.childNodes;
    console.log("ele.childNodes的执行结果是:");
    for(i = 0; i < child.length; i++){
       console.log(child[i].tagName);
    }
 }  
 exct (); 
</script>
</html>

A. 其运行结果是:
div1.children的执行结果是:
SPAN
div1.childNodes的执行结果是:
undefined
SPAN
undefined
B. 其运行结果是:
div1.children的执行结果是:
SPAN
div1.childNodes的执行结果是:
SPAN
C. 对于DOM元素,children是指DOM Object类型的子对象,不包括tag之间隐形存在的TextNode,而childNodes包括tag之间隐形存在的TextNode对象
D. 对于DOM元素,childNodes是指DOM Object类型的子对象,不包括tag之间隐形存在的TextNode,而children包括tag之间隐形存在的TextNode对象
答案: AC
解析
children 属性与 childNodes 属性的差别

  • childNodes 属性返回所有的节点,包括文本节点(空格和换行)、注释节点;
  • children 属性只返回元素节点;

9. 给网页添加javascript的方式有?

A. 使用script标签,将javascript代码写到之间
B. 添加外部javascript文件
C. 使用行内javascript
D. 使用@import引入javascript文件
答案: ABC
解析

  • C:οnclick="javascript:void(0)"就是行内javascript
  • D@importvue中主要是用来引用css文件的

10.假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');

A. Value is define
B. Value is undefine
C. define
D. undefine
E. Value is define 或者 Value is undefine
F. define 或者 undefine
G. 其它选项都有可能
答案: C
解析:本题考查三目运算符的应用,运算符优先级: “括号” > +" > “?” > “:

  • 根据运算符优先顺序,先执行括号 ,(val != ‘0’),会得到一个true或者false的布尔值
  • 再执行“ + ”,'Value is ’ + 任何值都是字符串拼接,因此得到的结果是一个字符串’Value is true '或者 'Value is false ’
  • 最后执行"?" ,在javascript中非空字符串为进行"?" 为true,所以输出defined

11. 以下代码执行后,console 输出的信息是?
for(var i = 0; i < 5; i++){
requestAnimationFrame(() => console.log(i));
}

A. 1 2 3 4 5
B. 0 1 2 3 4
C. 4 4 4 4 4
D. 5 5 5 5 5
答案: D
解析:requestAnimationFrame并非同步执行的,类似于setTimeout,所以for循环中的requestAnimationFrame会在循环退出的时候才执行其中的回调,注意循环退出的时候 i 的值为 5.


12. 请问以下程序的输出是()
function Foo(){
     var i=0;
     return function(){
         document.write(i++);
     }
}
var f1=Foo(),f2=Foo();
f1();
f1();
f2();

A. 010
B. 012
C. 000
D. 011
答案: A
解析

  • 本题考察的是闭包问题,它的主要作用,一是读取函数内部的变量,二就是让这些变量的值始终保持在内存中。
  • 局部变量i,对f1()和f2()来言是各自独立互不可见全局变量

13. 下面有关javascript内部对象的描述,正确的有?

A. History 对象包含用户(在浏览器窗口中)访问过的 URL
B. Location 对象包含有关当前 URL 的信息
C. Window 对象表示浏览器中打开的窗口
D. Navigator 对象包含有关浏览器的信息
答案: A B C D
解析

  • Navagator:提供有关浏览器的信息
  • Window:Window对象处于对象层次的最顶层,它提供了处理Navagator窗口的方法和属性
  • Location:提供了与当前打开的URL一起工作的方法和属性,是一个静态的对象
  • History:提供了与历史清单有关的信息
  • Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用

14. 按照CommonJS规范,在任何模块代码的作用域下内置了以下哪些变量?

A. module
B. context
C. require
D. exports
答案: A C D
解析
浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量。 module exports require global


【不懂】15. 下列说法正确的是?

A. 每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法
B. 对象的__proto__指向自己构造函数的prototype
C. Object.prototype. proto=== null,说明原型链到Object.prototype终止
D. 表达式 Function.prototype.proto.proto === null 的运行结果为true
答案: A B C D
解析:JS原型链通用规则

  • 对象有 proto 属性,函数有prototype属性;
  • 对象函数生成;
  • 生成对象时,对象的 proto 属性指向函数的 prototype属性。
    参考链接
    在这里插入图片描述

16. 下列js延迟加载的方式中,只有IE浏览器支持的是哪一种方式?()

备注:该题可能过时,请按照之前的知识选择。

A. async
B. defer
C. 动态创建DOM方式
D. 按需异步载入
答案:B
解析
在这里插入图片描述


17. 关于javascript的原始类型(primitive type),错误的是

A. 有5种primitive type,分别是Undefined、Null、Boolean、Number 和 String。
B. var sTemp = “test string”;alert (typeof sTemp);结果为string
C. var oTemp;alert(oTemp == undefined)为true
D. alert(null == undefined);结果为false
答案: D
解析

  • A:es6中的Symbol属于新的js数据类型,MDN上已经更新了。
  • D:null类型只有一个值,即null。但是undefined是从null派生而来的,因此ECMAScript把他们定义为相等的。

18.关于 javascript 模块化,下列描述错误的是?

A. AMD推崇依赖前置,CMD推崇依赖就近
B. Sea.js遵循AMD规范,RequireJS遵循CMD规范
C. 主流的模块化包括CommonJS,AMD,CMD等
D. 模块化有利于管理模块间的依赖,更依赖模块的维护
答案:B
解析

  • CommonJS服务器端的同步js模块化规范,由NodeJS实现
  • amd, cmd是用在浏览器端的异步模块化规范。
  • AMD依赖 前置书写,由require.js实现。
  • CMD依赖 就近书写,由sea.js实现。

19. 在jquery中指定一个类,如果存在就执行删除功能,如果不存在就执行添加功能,下面哪一个是可以直接完成该功能的?

A. removeClass()
B. deleteClass()
C. toggleClass(class)
D. addClass()
答案:C
解析

  • toggleClass() 对设置或移除被选元素的一个或多个类进行切换。
  • -先检测指定元素是否存在指定类名,存在删除,不存在添加

20. 下面求a中最大值正确的是
var a = [1,4,5,2,9];

A. Math.max(a)
B. Array.max(a)
C. Math.max.call(null,a)
D. Math.max.apply(null,a)
答案: D
解析

  • Math对象包含max()方法,用于确认一组数值中的最大值。该方法接收任意多个数值参数不接受数组参数
  • call( )需要传递明确几个参数,接受的是一个参数列表。
  • apply( )需要两个参数,第一个可以任意,第二个可以接收一个数组作为参数,不管数组中有多少个元素。
  • 参考链接

21. angularjs1指令中compile主要是做什么用的?

A. 绑定DOM
B. 数据绑定
C. 定义模版
D. 以上都不是
答案: A
解析:angular编译阶段分为两步 :

  • compile绑定dom
  • link 解析数据

22. 下面代码输出正确的一项?
var b = 3;
(function(){
b = 5;
var b = 2;
})();
console.log(b);

A. 5
B. 3
C. 2
D. 程序报错
答案:B
解析:函数内部的变量都是局部变量,这个局部变量叫什么都无所谓,也不会影响全局变量的值,在函数执行完成之后会立刻销毁。console输出的应该是全局变量b,var b = 3.


23. 下列关于比较Ajax与Flash的优缺点,相关描述正确的是?

A. Ajax的优势在意在于开放性,易用性及易于开发
B. Flash的优势在于多媒体处理,可以更容易的调用浏览器以外的外部资源
C. Ajax最主要的批评就是它可能破坏浏览器的后退功能
D. flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间
答案:ABCD
解析

  • Ajax的优势:1.可搜索性 2.开放性 3.费用 4.易用性 5.易于开发。
  • Flash的优势:1.多媒体处理 2.兼容性 3.矢量图形 4.客户端资源调度
  • Ajax的劣势:1.它可能破坏浏览器的后退功能 2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 ,不过这些都有相关方法解决。
  • Flash的劣势:1.二进制格式 2.格式私有 3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间 4.性能问题

【不懂】 24. 以下对闭包(closure)理解正确的有?

A. 闭包是指有权访问另一个函数作用域中变量的函数;
B. 函数内再嵌套函数;
C. 内部函数可以引用外层的参数和变量
D. 参数和变量不会被垃圾回收机制回收
答案:ABCD
解析


25. 如何获取下面表单 select域的选择部分的文本?
<form name="formA">
<select name="a" size="1" id=”obj”>
<option value="a">1</option>
<option value="b">2</option>
<option value="c">3</option>
</select>
</form> 

A. obj. value
B. obj.options[obj.selectedIndex].value
C. obj.text
D. obj.options[obj.selectedIndex].text
答案: D
解析


26. 需要删除arr数组中的第i个元素(从第1个元素开始),最好的做法是?

A. arr.splice(i-1,1)
B. arr.slice(0,n).concat(arr.slice(n+1,arr.length));
C. Array.prototype.remove=function(dx) {  
if(isNaN(dx)||dx>this.length){return false;}  
for(var i=0,n=0;i<this.length;i++)  {    if(this[i]!=this[dx])   {      this[n++]=this[i]    }  }  this.length-=1 }
D. for(var i=0,n=0;i<this.length;i++)  {    if(this[i]!=this[dx])    {     this[n++]=this[i]    }  }
答案: A
解析:splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
arrayObject.splice(index,howmany,item1,…,itemX)
注释:该方法会改变原始数组。
语法:

参数描述
index必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX可选。向数组添加的新项目。

27. js数组的方法中,哪些方法不能改变自身数组?

A. splice
B. concat
C. sort
D. pop
答案: B
解析

  • concat连接数组但是不改变原数组
  • splice删除数据会改变数组
  • sort排序会改变数组
  • pop出栈返回最后一个最后一个元素,改变数组

27. 以下 javascript 代码,在浏览器中运行的结果是()
var a = 4399 < 0 || typeof(4399 + '');
console.log(a);

A. true
B. string
C. undefined
D. false
E. number
答案: B
解析:此处的 “||” 是短路或,即 若“||” 之前的值为true则a直接等于前面的值。但此处“4399 < 0”是false,所以需要看 “||” 后面的表达式,4399 + ""是String类型,所以typeof返回String, a = String


28. 以下哪些对象是Javascript内置的可迭代对象?

A. Array
B. Map
C. String
D. Object
答案:ABC
解析
ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可迭代的”(iterable)。
原生具备 Iterator 接口的数据结构如下:

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象

29. 与其他 IEEE 754 表示浮点数的编程语言一样,JavaScript 的 number 存在精度问题,比如 0.2 + 0.4 的结果是 0.6000000000000001。以下选项中,能得到 0.6 的是?

A. parseFloat(0.2 + 0.4)
B. parseFloat((0.2 + 0.4).toFixed(1))
C. Math.round(0.2 + 0.4)
D. parseFloat((0.2 + 0.6).toPrecision(1))
答案:B
解析

  • parseFloat 解析一个字符串,并返回一个浮点数
  • toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字
  • Math.round 把一个数字四舍五入为最接近的整数
  • toPrecision 把数字格式化为指定的长度
选项结果
A0.6000000000000001
B0.6
C1
D0.8

30. 下面这段javascript代码,最后一句alert的输出结果是?
var msg='hello'; 
for (var i=0; i<10; i++)
 { 
   var msg='hello'+i*2+i; 
 }
 alert(msg); 

A. hello
B. hello189
C. hello30
D. hello27
答案: B
解析:同


【重点】31. 如何判断一个js对象是否是Array,arr为要判断的对象,其中最准确的方法是?

A. typeof(arr)
B. arr instanceof Array
C. arr.toString===’[object Array]’;
D. Object.prototype.toString.call(arr) === ‘[object Array]’;
答案: D
解析

  • typeof(arr),typeof返回的是基本数据类型及object,不会详细到array的,所以不可以
  • arr instanceof Array,这一点还不透彻,说的是在多iframe/window环境下,通过Instanceof来识别对象是否属于数组会出错
  • arr.toString,直接使用toString函数自然是数组有什么就返回什么了,例如[1,2] => ‘1,2’`
  • Object.prototype.toString.call(arr) === ‘[object Array]’;这才是正确的

32. 下列代码的输出结果为?
<html>
<body>
<script type="text/javascript">
var test=new Boolean();
document.write(test);
document.write("<br />");

var test=new Boolean(0);
document.write(test);
document.write("<br />");

var test=new Boolean(null);
document.write(test);
document.write("<br />");

var test=new Boolean("");
document.write(test);
document.write("<br />");

var test=new Boolean(NaN);
document.write(test);
document.write("<br />");
</script>

</body>
</html>

A. false false false false false
B. false true false false false
C. false false true test Boolean
D. 其他几项都不对
答案: A
解析

  • 在JavaScript中,false、null、0、" "、undefined 和 NaN被称为假值
  • 如果Boolean构造函数的参数不是一个布尔值,则该参数会被转换成一个布尔值。
  • 如果参数是 0, -0, null, false, NaN, undefined, 或者空字符串 (“”),生成的Boolean对象的值为false
  • 其他任何值,包括任何对象或者字符串”false”, 都会创建一个值为true的Boolean对象。
  • 非布尔值转化成布尔值,需要直接使用Boolean函数,而不能通过新建Boolean对象:var value = Boolean(value);

33. 下面关于块内声明函数的做法哪些是正确的?

A. if (x) { function foo() {}}
B. if (x) { var foo = function() {}}
C. if (x) { foo = function() {}}
D. ECMAScript明确的规范了块内函数,javascript实现了这个规范
答案: B
解析:块内声明的变量只要没加var 都算作全局变量。


34. angularjs1中的服务实质上是?

A. 网络服务
B. 单例对象
C. 接口对象
D. 函数调用
答案: B
解析:angularjs的服务是一个单例对象或函数,对外提供特定的功能。


35. 在 es6 中,下面程序运行结果输出,选项结果正确的是?
for(let i = i ; i < 12 ; i++ ){}
console.log(i);
const a = 12;
a = 13; 
console.log(a);
const g = {b : 3};
console.log(g.b);
g.b = 12;
console.log(g.b);
let[head,...tail] = [1 , 2 , 3 , 4];
console.log(tail);

A. 11,13,3,12,[3,4]
B. i not defined ,TypeError,TypeErrpr,4
C. 11,12,3,3,4
D. i not defined,TypeError,3,12,[2,3,4]
答案: D
解析

  • 第一次输出:局部变量i在for循环之后被销毁,因此输出“i not defined ”

  • 第二次输出:const a 为常量,a不可以再被修改,因此输出“TypeError”

  • 第三次输出:对象g.b的const定义变量不可以被重写,定义 对象 可以修改 属性 ,因此输出修改后的属性值“12”

  • 第四次输出:介绍ES6的数组语法

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

    以前,为变量赋值,只能直接指定值。


     
var a = 1; var b = 2; var c = 3;
 
    ES6允许写成下面这样。
 
var [a, b, c] = [1, 2, 3];
 
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1 bar // 2 baz // 3
 
let [x, , y] = [1, 2, 3];
x // 1 y // 3
 
let [x, y, ...z] = ['a'];
x // "a" y // undefined z // []
 
let [head, ...tail] = [1, 2, 3, 4];
head // 1 tail // [2, 3, 4]

因此输出 [2,3,4]


2020.4.20更新


36. 在 javascript 中,用于阻止默认事件的默认操作的方法是?

A. stopDeafault()
B. stopPropagation()
C. preventPropagation()
D. preventDefaultEven()
E. preventDefault()
答案: E
解析
下面三个事件都是事件对象的方法:

  • stopPropagation( ) 阻止事件冒泡。 这个事件不会阻止定义在元素上的其他事件。
  • stopImmediatePropagation( ) 会彻底的阻止事件, 在其之后的绑定在元素上的其他监听事件都不会触发
  • preventDefault( ) 阻止事件的默认动作
  • js没有选项中的其他事件
  • 可以使用preventDefault()阻止默认行为。例如a链接的跳转,在a链接跳转中,需要先对a链接绑定点击事件,然后在a链接的事件对象中调用该方法即可。

37. 有如下html结构,运行如下代码,依次点击4个li标签,哪一个选项是正确的运行结果()?
<ul>
 <li>click me</li>
 <li>click me</li>
 <li>click me</li>
 <li>click me</li>
</ul>
 var elements=document.getElementsByTagName('li');
    var length=elements.length;
    for(var i=0;i<length;i++){
        elements[i].onclick=function(){
        alert(i);
    }
 }

A. 依次弹出1,2,3,4
B. 依次弹出0,1,2,3
C. 依次弹出3,3,3,3
D. 依次弹出4,4,4,4
答案: D
解析

  • 事件(click,focus等等),定时器(setTimeout和setInterval)和ajax,都是会触发异步,属于异步任务
  • js是单线程的,一个时间点只能做一件事,优先处理同步任务; 按照代码从上往下执行,遇到异步,就挂起,放到异步任务里。继续执行同步任务。
  • 只有同步任务执行完了,才去看看有没有异步任务,然后再按照顺序执行。
  • 这里for循环是同步任务,onclick是异步任务,所以等for循环执行完了,i变成4了。

38. 下面哪一个不是 JavaScript 的保留字?

A. goto
B. abstract
C. implements
D. super
E. array
答案: E
解析:Array是Js的对象
在这里插入图片描述


39 . 分析下面代码块,输出( )行########。
var i = 0;
while( i < 40 ){
if( i < 30 )
continue;
Document.write(‘########’);
i++;
}

A. 40
B. 30
C. 39
D. 无数行
E. 一行也没有
答案: E
解析

  • continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内 ,在其它地方使用都会引起错误!是停止当前语句,并从头执行该语句。
  • 一开始,i = 0,满足if条件,进入continue,跳出本次循环,从新开始,重新进入循环。i还是等于0,变成死循环,所以无法输出结果。

40. 当在手机中需要保存移动手机号码时,怎样才能知道输入的手机号就是11位的移动手机号 ?
if(!filt.test(str))
{
alert("手机号输入错误");
}

A. var filt=/^1[0-9]{10}+$/;
B. var filt=^1[0-9]{10};
C. var filt=/1{10}/;
D. var filt=/^1[0-9]/;
答案: A
解析


41. w3c 制定的 javascript 标准事件模型,以下正确的顺序以及描述是?

A. 事件捕获>事件冒泡
B. 事件捕获->事件处理->事件冒泡
C. 事件冒泡->事件处理
D. 事件冒泡->事件处理->事件捕获
E. 事件处理->事件捕获->事件冒泡
答案: B
解析:事件流包括3个阶段:
(1)事件捕获
(2)处于目标阶段(事件处理
(3)事件冒泡阶段


42. 现有一组人员年龄的数据,要求将这些人员的年龄按照从小到大的顺序进行排列起来,要怎样来实现?

A.

function numberSort(a,b)
{
return a - b;
}
var arr=new Array("23","6","12","35","76");
document.write(arr.push(numberSort));

B.

function numberSort(a,b)
{
return b - a;
}
var arr=new Array("23","6","12","35","76");
document.write(arr.push(numberSort));

C.

function numberSort(a,b)
{
return b-a;
}
var arr=new Array("23","6","12","35","76");
document.write(arr.sort(numberSort));

D.

function numberSort(a,b)
{
return a - b;
}
var arr=new Array("23","6","12","35","76");
document.write(arr.sort(numberSort));

答案: D
解析

arr.sort([compareFunction])
  • sort() 方法参数为空(即没有指明compareFunction) ,元素按照转换为的字符串的诸个字符的Unicode位点进行排序,
  • sort() 方法参数指明 compareFunction ,数组会按照调用 函数的返回值 排序。
[3, 2, 1].sort(function (a, b) {
    return a - b;
});
  • 执行机制:两数比较,小的排在大的前面
  • a - b < 0,那么 a 会被排列到 b 之前;
  • a - b = 0,a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • a - b > 0,那么 b 排列到 a 之前。
  • 小技巧升序排序 return a - b降序排序 return b - a

【不懂】43. 以下符合 ES6 写法的有:?

A.

class Foo
{
	constructor() {return Object.create(null);}
}
Foo()

B.

var m=1;
export m;

C.

export var firstName=’Michael’;

D.

A模块中export{readFile}后,在B模块中import readFile fromA’可以获取到readFile

答案: C
解析:B导出时应加括号 export {m}
参考链接


44. JavaScript实现继承的方式,不正确的是 ?

A. 原型链继承
B. 构造函数继承
C. 组合继承
D. 关联继承
答案: D
解析:JavaScript实现继承共6种方式:
原型链继承、借用构造函数继承组合继承原型式继承寄生式继承寄生组合式继承。


45. 函数的调用方式有哪些 ?

A. 直接调用
B. 作为对象方法调用
C. 作为构造函数调用
D. 通过call和apply方法调用
答案: ABCD
解析


46. 以下代码的执行后,str 的值是?
var str = "Hellllo world";
str = str.replace(/(l)\1/g, '$1');

A. Helo world
B. Hello world
C. Helllo world
D. Hellllo world
答案: B
解析
(1) 定义

  • (l)表示第一个分组里有l
    \1表示所获取的第1个()匹配的引用
  • /g表示全局匹配
  • $1表示第一个分组里的值l

(2)因此

  • (l)\l 表示匹配两个连续字符ll,即ll
  • (l)\l/g 表示全局匹配两个连续字符ll即llll
    str.replace(/(l)\1/g, ‘$1’) 表示将ll替换成l

(3)结果

  • Hellllo =》 Hello

【不懂】47. 在标准的 JavaScript 中, Ajax 异步执行调用基于下面哪一个机制才能实现? ?

A. Event和callback
B. 多线程操作
C. 多CPU核
D. Deferral和promise
答案: A
解析


48. 以下代码输出结果为 ?
var str1=new RegExp("e");
document.write(str1.exec("hello"));

A. e
B. null
C. 1
D. 其他几项都不对
答案: A
解析

  • exec() 方法是一个正则表达式方法。
  • exec() 方法用于检索字符串中的正则表达式的匹配。
  • 该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null
  • 本题的exec执行结果是一个数组,但是使用了document.write,所以显示在html中的内容是数组中的元素,即e。
  • js还有一个test()方法,用于检测字符串是否匹配某个模式,返回值为boolean

49. 下面代码执行后, arr 的值是?
var arr=[{a:1},{}];
arr.forEach(function(item,idx){
    item.b=idx;
});

A. [{a:1},{}]
B. [{a:1,b:0},{b:1}]
C. [{a:1,b:1},{b:1}]
D. [{a:!,b:0},{b:0}]
答案: B
解析:首先,forEach 没有返回值
第一次,item 值为 {a:1}
第一次运行后 item 值为 {a:1,b:0}
第二次,item 值为 {}
第二次运行后 item 值为 {b:1}


50. ({} + ‘b’ > {} + ‘a’)返回值是?

A. a
B. b
C. ba
D. true
E. false
F. 执行报错
答案: D
解析参考链接


【不懂】51. 以下哪些选项可以将集合A转化为数组??

A. Array.form(A)
B. [].slice.apply(A)
C. […A]
D. [].map.call(A, o => o)
答案: ABCD
解析

  • Array.from(arr, mapfn,thisArg)方法,用于将两类可以把对象转换为真正的数组:类似数组的对象和可遍历的对象(部署了Iterator接口的,String,ES6新增的Map和Set)。可以传3个参数,其中第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。
  • slice() 方法可从已有的数组中返回选定的元素。
    返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
    说明:请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
    所以在这里就是对集合A应用slice,返回一个新的数组,不对数组做任何改变。
    展开运算符,把A集合的元素展开后,用数组[]承载,返回新的数组。
  • map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
    map() 方法按照原始数组元素顺序依次处理元素。
    注意: map() 不会对空数组进行检测。
    注意: map() 不会改变原始数组。
    所以map方法返回了一个新的数组,并且数组中每个元素是A里面的元素。

52 . 当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是( )?

A. window.history.forward(1);
B. window.history.back(1);
C. window.history.go(-1);
D. window.history.forward(-1);
答案: AD
解析

  • B: window.history.back( ) 方法加载历史列表中前一个 URL。 这等同于在浏览器中点击后退按钮。
  • C: **window.history.go( )**方法载入到会话历史中的某一特定页面, 通过与当前页面相对位置来标志 (当前页面的相对位置标志为0).
    (1) 向后移动一个页面 (等同于调用 back()):
window.history.go(-1);

(2) 向前移动一个页面, 等同于调用了 forward():

window.history.go(1);

53. 如下代码输出的结果是什么?
console.log(1+ "2"+"2");
console.log(1+ +"2"+"2");
console.log("A"- "B"+"2");
console.log("A"- "B"+2);

A.
122
122
NaN
NaN
B.
122
32
NaN
NaN2
C.
122
32
NaN2
NaN
D.
122
32
NaN2
NaN2
答案: C
解析

  • A:做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。因此,这里相当于字符串的合并,即为122.
  • B:第一个+"2"中的加号是一元加操作符+"2"会变成数值2,因此1+ +“2"相当于1+2=3.然后和后面的字符串“2”相合并,变成了字符串"32”.
  • C:“A”-“B"的运算中,需要先把 "A"和"B"用Number函数转换为数值,其结果为NaN在减法操作中,如果有一个是NaN,则结果是NaN,因此"A”-"B"结果为NaN。然后和"2"进行字符串合并,变成了NaN2.
  • D:根据上题所述,“A”-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN。

54. 下面的语言中哪些语言是动态语言( )?

A. C
B. JavaScript
C. C++
D. CSS
E. Java
F. Objective-C
答案: B
解析

  • 静态语言(强类型语言)
    静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。
  • 例如:C++、Java、Delphi、C#等。
  • 动态语言(弱类型语言)
  • 动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
  • 例如:PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。

55 .假设有如下代码,那么a(10)的返回结果是 ?
function a(a)
{
  a^=(1<<4)-1;
   return a;
}

A. 5
B. 10
C. 15
D. 16
答案: A
解析

  • << 表示左移,先化为2进制,1为01,然后左移4位,成010000,再化为10进制,10000(二进制) = 16(十进制)。 接着a = a ^15 而a = 10.
  • 符号^表示异或,也就是比较对应的二进制位是否相同,相同为0,不同为1。 10的二进制 => 1010 15的二进制 => 1111 通过异或运算可以得到 0101 再转换成十进制即是5

56. 在 javascript 中,以下返回 false 的选项是?

A. var test=1;typeof test==‘number’;
B. var test=1.2;typeof test==‘float’;
C. var test=undefined;typeof test==‘undefined’;
D. var test={};typeof test==‘object’;
E. var test=‘4399’-0;typeof test==‘number’;
F. var test=null;typeof test==‘object’;
答案: B
解析:B选项 type of 1.2 是 number


57. 解释型语言的特性有什么??

A. 非独立
B. 效率低
C. 独立
D. 效率高性
答案: AB
解析

  • 解释性语言的定义:
    解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
    现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

  • 编译性语言的定义:
    编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。


58. 下列哪些事件不支持冒泡?

A. resize
B. click
C. blur
D. mouseleave
答案: ACD
解析
不支持冒泡事件有:
①focus
②blur
③mouseenter
④mouseleave
⑤load
⑥unload
⑦resize


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


. ?

A.
B.
C.
D.
答案:
解析


如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!


  1. 0-9 ↩︎

  • 24
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值