1.以下代码执行时不会在控制台输出错误信息的是:B
A. let a = decodeURIComponent('%');
B.
var a;
a();
function a() {
console.log(a);
C.
Promise.reject(123).finally(a => {
console.log(a);
});
}
D.
var a = 1;
let a = 2;
console.log(a);
分析B:
- js有变量提升和函数提升,指的是用 var声明变量 或用 function 函数名(){ } 声明的,会在 js预解析 阶段提升到顶端;(es6的let 和 const 不会提升)
- 函数提升优先级 高于 变量提升
- 相同作用域时声明变量而不赋值则还是以前的值, 而子作用域声明不赋值则函数内该值为undefined,因为声明了私有变量
2.下面的语言中哪些语言是动态语言( JavaScript )
解释:
3.下列函数哪些是JavaScript的全局函数?( A、B、D )
A.encodeURI
B.parseFloat
C. setTimeout
D.eval
分析:setTimeout()是宿主环境提供的
JS全局函数:
个人记忆方法:6(编码相关)+ 2(数据处理)+ 4(数字相关)+ 1(特殊)
- 编码相关:
escape()、unescape()、encodeURI()、decodeURI()、
encodeURIComponent()、decodeURIComponent() - 数据处理:
Number()、String() - 数字相关:
isFinite()、isNaN()、parseFloat()、parseInt() - 特殊:
eval()
4.判断对象myObj是否存在的写法,下面说法错误的是( C)
A. typeof myObj == “undefined”
B. myObj === undefined
C. myObj === null
D.!this.hasOwnProperty(‘myObj’)
5.有var d = new Date(‘2018-05-09’),可以设置为6月份的操作是?(C、D)
- d.setMonth(7);
- d.setMonth(6);
- d.setMonth(5);
- d.setDate(40);
setDate()参数分析:
n表示一个月中的一天的一个数值(1 ~ 31):
0 为上一个月的最后一天
-1 为上一个月最后一天之前的一天
如果当月有 31 天:
32 为下个月的第一天
如果当月有 30 天:
32 为下一个月的第二天;
40 为下一个月的第9天;
6. JavaScript定义var a=“40”,var b=7,则执行a%b会得到(5)。
分析:使用-
,/
,*
,%
a都会隐式转换为数字类型。
注意:+号,数字隐式转换成字符串。其余的运算符号是字符串隐式转换成数字
7.关于 javascript 模块化,下列描述错误的是(B)。
- AMD推崇依赖前置,CMD推崇依赖就近
- Sea.js遵循AMD规范,RequireJS遵循CMD规范
- 主流的模块化包括CommonJS,AMD,CMD等
- 模块化有利于管理模块间的依赖,更依赖模块的维护
分析:AMD和CMD都是浏览器端的js模块化规范,分别由require.js和sea.js实现。 CommonJS是服务器端的js模块化规范,由NodeJS实现。
个人记忆法:
- 看AMD、CMD的首字母,26位字母,A在C前面,所以AMD是
依赖前置
,CMD是依赖就近。
- 同样require.js、sea.js,看首字母,r在s前面。所以require.js是AMD的实现方式。
即首字母前的对应”前“
。
8. 以下结果里,返回true的是?
!![]
!!{}
[]==0
null==undefined
9. 以下代码执行后,array的结果是?
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
结果:[3,4,1,6,-1,10]
分析:
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
- 原数组var array=[-1,1,3,4,6,10];
- 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
- 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
10. es6中的export、import用法
详细用法可看MDN:
11.this对象的理解正确的是 (A、B、D)
- A.在不手动改变this指向的前提下,this总是指向函数的直接调用对象
- B 如果有new关键字,this指向new出来的那个对象
- C this总是指向函数的非间接调用者
- D IE中attachEvent中的this总是指向全局对象window
12.JavaScript的typeof运算符的可能结果:(symbol
、boolean、undefined、string)
13.以下表达式不会出现错误的有(B、C、D)
- A、2.toString()
- B、2…toString()
- C、2 .toString()
- D、(2).toString()
14.在很多时候,我们需要给网页中的一些元素不停的切换样式,那么要怎样实现给元素删除一个样式的同时,添加另外一个样式( A )
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');
本题考察JQuery中选择器的知识。
常用有三种:
①元素选择器:$(“TagName”)
②ID 选择器: KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲ID") ③类选择器:(".className")
个人看法解析:
A:正确。
B:错误。选项使用元素选择器,但是 HTML 中没有 us 标签(不考虑自定义标签这种特殊情况)
C:错误。选项使用类选择器,看起来是正确的。但, 若删除类选择器 className 就是 .us,就无法再通过 $(’.us’).addClass(‘ClassName’) 给该元素添加样式了
D:错误。add() 方法:把元素添加到已存在的元素组合中。 remove() 方法:移除被选元素,包括所有的文本和子节点。
15.在jquery中,如果想要获取当前窗口的宽度值,下面哪个是实现该功能的?(width())
16.angularjs1中control间通信最好使用什么方式?( C )
- A. 回调
- B. 全局变量
- C. 广播
- D. 函数调用
17. angularjs1中使用指令,绑定监听是在什么时候?(B)
- A. compiles时
- B.link时
- C.require时
- D.生成DOM时
分析:
为了解决AngularJS性能问题,编译阶段应分为两个阶段:
- compile (绑定DOM,即compile是在生成DOM后扫描并生成时候运行)
- link(数据绑定)
18.JS里的function能访问它们的(A、B、C、D)
- A.参数
- B.局部变量或函数
- C. 全局变量
- D. 外部函数的变量或函数
19.下面匹配整数的正则表达式中,正确的是( A )
- A:
(-?[1-9]\d*)|0
- B:
[1-9]\d*
- C:
-[1-9]\d*
- D:
[1-9]\d*|0
分析:
A:整数 (包括0)
B:正整数
C:负整数
D:正整数(包括0)
正则相关知识:
?
:出现0次或1次(即A选项,有-
表示是负数,没有就表示为正数)\d
:匹配数字字符*
:表示字符可出现0次或多次
20. 下面哪些执行结果为true(B、C、E)
- A: ‘foo’ == new function(){ return String(‘foo’); };
- B: ‘foo’ == new function(){ return new String(‘foo’); };
- C: [] == 0
- D: ![]
- E: !0
重点区分:A 与 B
分析:A、B
构造函数(new function(){}
)始终会返回一个对象:
情况1:你写了return {a:xxx} 他就会返回你定义的这个对象
情况2:你没写return 或者你return a 一个基本类型 这两种情况(没写或者return基本类型)它都会默认返回一个空对象
- a选项返回了一个String 所以构造函数会默认返回一个空对象
- b选项返回一个String对象(因为有new 所以是字符串对象)所以构造函数就返回了这个String对象
21. void()
该表达式的结果是:D
- A. undefined
- B. TypeErrot
- C. null
- D. SyntaxError
分析:void是一元运算符,它出现在操作数之前,操作数可以是任意类型,操作数会照常计算,但忽略计算结果并返回undefined
。(无论操作数是什么类型,都是只返回undefined)。
示例:
- void(NaN)
- void(1+9)
- 都是返回undefined
- 但
操作数不能为空
,空了就语法报错
22.指令中哪种作用域可以继承父scope? (A)
- A. scope:true
- B. scope:{}
- C. scope:parent
- D. 默认就继承了父作用域
23. 以下哪些表达式的值为0?(A B C D)
- A. (()=>{}).length
- B. 1 & 2
- C.+[]
- D. [1,2,-3].reduce((a, b) => a - b, 0)
分析:
A : (()=>{}).length; 获取方法形参个数,形参为0
B :
按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
取反运算符(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;
异或运算符“^”
用于比较两个二进制数的相应位。在执行按位异或运算时,如果两个二进制数的相应位都位1或两个二进制数的相应位都位0,则返回 0;如果两个二进制数的相应位其中一个为1,另一个为0,则返回 1;
24. 以下哪些事件会在页面加载完成(onload)之前触发?(A、D)
- A. readystatechange
- B. pageshow
- C. beforeunload
- D. DOMContentLoaded
25. 以下哪些代码执行后i的值为10:(A C)
A:
let i =1 + {
valueOf() { return 9; }
};
B:
let i = 0;
new Array(10).forEach(() => {
i++;
});
C:
let i = parseInt(‘0xA’);
D:
let i = 5;
function a(i) {
i *= 2;
}
a(i);
分析:
A:
如果在需要使用原始值的上下文中使用了对象,就会自动调用valueOf方法.这里重写了默认的valueOf 方法。
所以相当于 let i = 1+9
B:
forEach方法按升序为数组中含有效值的每一项执行一次 callback函数,那些未初始化的项将被跳过。
new Array(10)创建的数组默认值都是undefined,所以回调函数都会被跳过。
C:
在没有指定基数的情况下,如果字符串以"0x"或者"0X"开头, 则基数是16 (16进制)。
相当于let i = parseInt(‘0xA’,16)
D:
i是形参,,属于局部变量,不影响全局变量i的值
26. 在浏览器控制台执行以下代码,输入的结果是(A)
A:4400 4401 4399 4400
B:4400 4401 4401 4402
C:4400 4400 4399 4400
D:4400 4401 4399 4402
E:4400 4401 4401 4400
注意:之所以第三个输出是4399
,是因为在result.add()中,进行n++操作的n不是result.n
,因为add内部使用的不是this.n
,如果是this.n
则操作的就是result.n
。而result.add()操作的n是test、add函数形成的闭包中的n。
27. 解释型语言的特性有什么?
- 非独立:JavaScript语言依赖执行环境,对于客户端来说是浏览器,对于服务端来说是Node
- 效率低:执行前不需要编译,执行时编译,因此效率低。
28. 关于angularjs1说法,错误的是(B)
A:前端mvc,极大降低前端开发的耦合
B:极大的丰富了dom操作
C:实现了数据双向绑定
D:实现了依赖注入
注意:
- Angular大大减少了对DOM的访问。
- jQuery极大的丰富了DOM操作
29. ({} + ‘b’ > {} + ‘a’)返回值是(true)
分析:{}
进行+法运算会自动转化为字符串"[object Object]"
,然后进行字符串拼接。
即:"[object Object]b"
>"[object Object]a"
,根据字典比较,比较到最后一位,b>a。
30.下面结果为不为真的表达式是:(B D)
A:null = = undefined Object.prototype;
B:[1,2,3].splice(1,1,1) = = [2]
C:let Mi = new Function();Mi._ _ proto _ . _ proto _ _ == Object.prototype;
D:‘1’ = = = true
注意B选项的splice()方法:
- 参数一:index。必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
- 参数二:number。必需。整数,要删除的项目数量。如果设置为0,则不会删除项目。
- 后面任意多参数:可选,向数组添加新项目。(
注意:不是在数组末尾追加新项目,取决于第一、第二个参数
) 返回值:所有删除项组成的数组
[1,2,3].splice(1,1,1)
的返回值是[2]
,但原数组[1,2,3]
执行完后变成了[1,1,3]
。
注意: 这里[2]!=[2],因为[1,2,3].splice(1,1,1)
返回的[2]
是新创建的数组,它们两者地址值
是不同的,所以不等。
31. 某下对this对象的理解哪些是正确的 (A B D)
A: this总是指向函数的直接调用者(而非间接调用者);
B: 如果有new关键字,this指向new出来的那个对象;
C: 在事件中,this总是指向触发这个事件的对象;
D: this是函数运行时自动生成的一个内部对象,只能在函数内部使用;
注意:在事件中,this指向触发这个事件的对象, 特殊的是,IE中的attachEvent中的this总是指向全局对象Window;
32.以下哪些选项可以将集合A转化为数组?(A C)
A:Array.from(A)
B: [].slice.apply(A)
C:[…A]
D:[].map.call(A, o => o)
33.以下哪个表达式的值为true?(D)
A:‘1’ === 1
B:isNaN(1/0)
C:1 in [1]
D:1 && 2 > 1
重点分析:B、C
B:
- 在JS中任何数除以0都不会导致错误而终止程序,而是会返回特殊值
Infinity
,而不会影响程序的执行。 - 比0大的数除以0,则会得到无穷大,所以 js 用 Infinity 来显示出来。
- 也就是1/0得到的是Infinity。isNaN(1/0)返回的是false。但是isNaN(0/0)返回的就是true
C:
- in操作符,对于数组属性需要指定数字形式的索引值来表示数组的属性名称(固有属性除外,如length)。
- 所以说在这里,1 in [1]并不是表示数字1在不在数组里。而是表示数组中含不含有1这个索引index值。数组长度为1,所以只含有的index值为0,这个表达式返回fasle。
34.如果不给cookie设置过期时间会怎么样?(在浏览器会话结束时过期)
34. 以下代码执行后,console 输出的信息是?
for(var i = 0; i < 5; i++){
requestAnimationFrame(() => console.log(i));
}
输出:5 5 5 5 5
注意:requestAnimationFrame
是个异步函数
35.NOSCRIPT标签是做什么用的?©
A:制止脚本的运行
B:防止区域脚本被js修改
(例如aDiv.innerHTML = ‘something’ 将会不起作用)
C:用来定义在脚本未被执行时的替代内容
D:NOSCRIPT 标签并不存在
分析:NOSCRIPT标签用来定义在脚本未被执行时的替代内容。也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText
<body>
...
...
<script type="text/javascript">
<!--
document.write("Hello World!")
//-->
</script><noscript>Your browser does not support JavaScript!</noscript>...
...
</body>
36.下面得到的结果分别是什么?(true true false)
console.log(([])?true:false);
console.log(([]==false?true:false));
console.log(({
}==false)?true:false)
分析:此题考察类型转换,三元运算符先“分清是非”,再决定今后该走哪条路,“==”运算符比较“喜欢”Number类型
。
下面是题目的类型转换结果:
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);
《JavaScript权威指南》的部分相关知识点
“==”运算符(两个操作数的类型不相同时,较喜欢“Number”类型)
- 如果一个值是null,另一个值是undefined,则它们相等
- 如果一个值是数字,另一个值是字符串,先将字符串转换为数学,然后使用转换后的值进行比较。
- 如果其中一个值是true,则将其转换为1再进行比较。如果其中的一个值是false,则将其转换为0再进行比较。
- 如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,再进行比较。
37.在文件/home/somebody/workspace/somemodule.js中第一行引用了一个模块:require(‘othermodule‘),请问required 的查找模块的顺序(C B A D)
A. /home/somebody/workspace/node_modules/othermodule/index.js
B. /home/somebody/workspace/node_modules/othermodule. Js
C.CORE MODULES named othermodule
D./home/somebody/node_modules/othermodule/index.js
分析:
-
首先加载核心模块,不管有没有同名/同目录的情况下,
核心模块优先加载.
-
其次按照
相对路径/绝对路径
加载文件模块(加载顺序,首先试图按照路径查找 .js 扩展名的文件
,如果没有,试图按照路径查找.json 扩展名
的文件,如果还是没有,就按照路径查找.node 扩展名
的c++模块了) -
最后搜索
node_modules
目录下通过npm下载的第三方模块.
注意:首次加载这类模块最慢,因为执行文件所在目录的node_mondel 文件夹下找不到时,会去父级node_mondel 文件夹里查找,如果还是找不到会去父级的父级node_mondel 文件夹里查找…但是,只要首次加载成功后,node就会缓存起来,它缓存的是编译后的二进制模块,所以以后的加载速度和效率都的有保证的.
38.以下代码执行后,console 的输出是?(D)
function Foo(){
'use strict'
console.log(this.location);
}
Foo()
A. 当前窗口的 Location 对象
B. undefined
C. null
D. TypeError
分析:'use strict’是严格模式,严格模式下禁止this关键字指向全局对象。此时this为undefined。
39.下列说法正确的是(A B C D)
A:每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法
B:对象的__proto__指向自己构造函数的prototype
C:Object.prototype. proto=== null,说明原型链到Object.prototype终止
D:表达式 Function.prototype.proto.proto === null 的运行结果为true
40.以下代码执行后,console 的输出是?(A)
let x = 10;
let foo = () => {
console.log(x);
let x = 20;
x++;
}
foo();
A:抛出 ReferenceError
B:10
C:20
D:21
分析:暂时死区的问题
,虽然let语句不像var语句会产生hoisting(变量提升),JavaScript引擎也会意识到在后边的let定义,只是不支持在let声明语句之前引用该变量而已。所以,只要在同一个block中,let是在后边定义的,就不能在之前引用该变量。与此同时,也不能再去取嵌套外层的值了(x=1)。
41.以下代码执行后,result 的值是:(B)
var result = Math.round(11.5) + Math.round(-11.5);
A:0
B:1
C:-1
分析:result = 12 - 11=1;
- 如果参数的小数部分大于 0.5,则舍入到下一个
绝对值更大
的整数; - 如果参数的小数部分小于 0.5,则舍入到下一个
绝对值更小
的整数; - 如果参数的小数部分
恰好等于0.5,则舍入到下一个在正无穷(+∞)方向上的整数
。
Math.round(-11.5)舍入到正无穷方向上的整数,即为-11比-12更靠近正无穷。
42. 请问 a 的结果是什么?(C)
if(! "a" in window){
var a = 1;
}
alert(a);
if(! “a” in window)这句代码的意思是:判断全局对象window中是否有变量a。javascript只有函数作用域, 没有块作用域,所以在if 里面的var a =1
会变量提升到if
上面。所以window中有变量a,而不会进入if块作用域中,所以a还是声明没有初始化。
43. 以下代码执行后,a.x 和 b.x 的结果分别是? (C)
function A(x){
this.x = x;
}
A.prototype.x = 1;
function B(x){
this.x = x;
}
B.prototype = new A();
var a = new A(2), b = new B(3);
delete b.x;
A:2, 3
B:2, 1
C:2, undefined
D:其他几项都不对
分析:
function A(x){
this.x = x;
}
A.prototype.x = 1;
function B(x){
this.x = x;
}
B.prototype = new A();
var a = new A(2), //a.x首先要在自己的构造函数中查找,没有采取原型上找,这里有this.x = x.所以a.x = 2;
b = new B(3);//B.prototype = new A();形成原型链
delete b.x;//但是delete只能删除自己的x不能删除父级的x.
//b.x通过原型链找到构造函数A里面的this.x=x但是没有赋值,所以undefined
总结:先在构造函数中查找,没有则再到原型上查找
。
44. 运行以下程序,y和z的最终结果为:(B)
<script>
var m= 1, j = k = 0;
function add(n) {
return n = n+1;
}
y = add(m);
function add(n) {
return n = n + 3;
}
z = add(m);
</script>
A:2,4
B:4,4
C:2,2
D:报异常
分析:js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数,只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后,后面的函数会覆盖前面定义的函数
。结合这道题来说,由于函数声明提升
,所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数,所以两次调用add()返回的值是相同的。也就是y,z都为4.
45. 上面的输出结果:(D)
(function() {
var a = b = 5;
})();
console.log(b);
console.log(a);
A:5,5
B:undefined,undefined
C:5,undefined
D:5,Uncaught ReferenceError: a is not defined
分析:考点在于var a=b=5相当于拆解成var a=b; b=5; 然后,b=5前面没有var,相当于声明为全局变量。
46.angularjs1中的服务实质上是(单例对象)
47.下列代码,页面打开后能够弹出alert(1)的是?(A B C)
A:< iframe src=”javascript: alert(1)” >< /iframe >
B:< img src=”” οnerrοr=”alert(1)”/ >
C:IE下< s style=”top:expression(alert(1))” >< /s >
D:< div οnclick=”alert(1)” >< /div >
分析:
C:在ie 7下会连续弹出, IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javascript表达式,CSS属性的值等于Javascript表达式计算的结果。 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。
48.关于这段代码正确的结论是:(A)
var F=function(){
};
Object.prototype.a=function(){
};
Function.prototype .b=function(){
};
var f=new F();
A:f能取到a,但取不到b
B:f能取到a,b
C:F能取到b,不能取到a
D:F能取到a,不能取到b
另一道例题:
网上有一道美团外卖的面试题是这样的: Function.prototype.a = 'a';
Object.prototype.b = 'b';
function Person(){
};
var p = new Person();
console.log('p.a: '+ p.a); // p.a: undefined
console.log('p.b: '+ p.b); // p.b: b 问为什么?
有不少同学第一眼看上去就觉得很疑惑,p不是应该继承了Function原型里面的属性吗,为什么p.a返回值是undefined呢?
其实,只要仔细想一想就很容易明白了,Person函数才是Function对象的一个实例,所以通过Person.a可以访问到Function
原型里面的属性,但是new Person()返回来的是一个对象,它是Object的一个实例,是没有继承Function的,所以无法访问
Function原型里面的属性。但是,由于在js里面所有对象都是Object的实例,所以,Person函数可以访问到Object原型里面的
属性,Person.b => 'b'
分析:F能取到a和b
49.关于绑定变量,最正确的做法是(D)
A: < div >{
{value}}< /div >
B:< div ng-bind=“value”>< /div >
C:< div ng-model=“value”>< /div >
D:< div ng-bind=“obj.value”>< /div >
分析:
A:当angular还没加载时,可以将{
{value}}显示出来,用户体验不好
C:ng-model用于将输入框的输入值和变量绑定起来,无法用在div上
剩下的B和D都实现了变量绑定,但是D的实现更好。D的做法将变量绑定在$scope对象的属性上,这样的做法是angularjs 的最佳实践
50.下列代码存在几个变量没有被回收?( D)
A:0个
B:1个
C:2个
D:3个
分析:
1:全局变量i不会被回收
2:全局变量add不会被回收
3:闭包引用的局部变量i不会被回收
51.以下对闭包(closure)理解正确的有 (A B C D)
A: 闭包是指有权访问另一个函数作用域中变量的函数;
B: 函数内再嵌套函数;
C: 内部函数可以引用外层的参数和变量
D: 参数和变量不会被垃圾回收机制回收
52. 以下哪些操作会触发Reflow:(B C)
var obj = document.getElementById(“test”);
A:alert(obj.className)
B:alert(obj.offsetHeight)
C:obj.style.height = “100px”
D:obj.style.color = “red”
下面情况会导致reflow
发生
1:改变窗口大小
2:改变文字大小
3:内容的改变,如用户在输入框中敲字
4:激活伪类,如:hover
5:操作class属性
6:脚本操作DOM
7:计算offsetWidth和offsetHeight
:只要读取offsetWidth、offsetHeight
8:设置style属性
53. 以下哪些语句触发了隐式的类型转换?(A B D)
A:parseInt(12.34, 10)
B:0 ? 1 : 2
C:2e1 * 0xaa
D:1 + ‘1’
分析:
A选项
:parseInt() 函数可解析一个字符串,并返回一个整数。所以说,number类型的12.34发生隐式转换为string。
B选项
:三元运算符,会判断?前的表达式为true或者false。所以number类型的0发生了隐式转换为boolean。
+运算发生了字符串的隐式转化。原本number类型的1,和string类型的’1’进行了+运算,连接了字符串。返回’11’。
C选项
:e是js里面指数的一种表示形式。也就是10的多少次方。
2e1 等价于 2 *(10^1) = 20
2e2 等价于 2 (10^2)= 200
0xaa是16进制的表示方法。相当于十进制的170。
这里都是number类型,发生了数字的乘法运算:20170,没有发生类型转换。
54. 内置的可迭代对象?
- String
- Array
- TypedArray
- Map
- Set
- arguments对象
55. 当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是( A D )
A: window.history.forward(1);
B: window.history.back(1);
C: window.history.go(-1);
D: window.history.forward(-1);
56. 将函数参数arguments伪数组转化为真数组的方法:
Array.from(arguments)
Array.prototype.slice.call(arguments)
[...arguments]
Array.prototype.concat.apply([],arguments)
57. 请写出下面ES6代码编译后所生成的ES5代码;
class Person {
constructor (name) {
this.name = name;
}
greet () {
console.log(`Hi, my name is ${
this.name}`);
}
greetDelay (time) {
setTimeout(() => {
console.log(`Hi, my name is ${
this.name}`);
}, time);
}
}
编译ES5:
var Person = (function () {
function Person (name) {
this._name = name;
}
Person.prototype.greet = function () {
console.log(“Hi, my name is “ + this._name);
}
Person.prototype.greetDelay = function (time) {
var _this = this;
setTimeout(function () {
console.log(“Hi, my name is “ + _this.name);
}, time);
}
})();