JavaScript基础教程 专业八级测试答案整理
沉沙 2018-10-09 来源 : 阅读 950 评论 0

摘要:本篇教程介绍了JavaScript基础教程 专业八级测试答案整理,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入。

本篇教程介绍了JavaScript基础教程 专业八级测试答案整理,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入。

<


1,


["1", "2", "3"].map(parseInt)

 

 这东西无非是函数参数问题,记得住就答得出来,真没什么卵用。
主要是parseInt的第二个参数,是解析数字的基数,也就是进制,范围为2~36。
比如这道题的第二个运行结果 就是 parseInt(‘2‘,1);  参数不符 故是NAN。
第二个运行结果 parseInt(‘3‘,2); 二进制里没有3,所以也是NAN。
2


[typeof null, null instanceof Object]


 null,array的 typeof 都是object。
但是instanceof还是很严谨的。
不过以下需要注意:
1. instanceof 是判断前者是否为后者的一个实例,所以

2.判断一个变量的类型上面两种都不好要用这个:
Object.prototype.toString.call(XXX).slice(8,-1);

3


[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow)] ]

 

 这个就是新array api的熟悉啦,
reduce也支持两个参数,arr.reduce(callback[, initialValue])   第二个参数··· 就叫他迭代开始吧, arr和initialValue两个参数不能同时为空,上一道题就是同时为空了。
链接里给的答案解析是有一些小问题的。
4是操作符优先级问题,就不说了。
5
这道题涉及的东西是作用域和变量声明。
javaScript是没有块级作用域的,只有函数作用域。所以
if(true){var hehe = ‘hehe‘}这样写是没错误的。
因为作用域是一样的,当然还有最关键的一点,就是js的提前声明。
代码等同于:


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

 

 所以name是undefined;
6 js最大的数是2^53。
7 pass
8
js没有精确的数值,是因为十进制在转换为计算机用二进制时候的丢失导致的。该死的js并没有对这个误差进行处理。
9,10
switch 用 === 进行枚举,记住即可。
另外周同学上次在社区 群里提到的:
=== 是不触发toString的。
11 pass
12 同1
13 pass
14 


var a = [0];
if ([0]) {
console.log(a == true);
} else {
console.log("wut");
}


 if的判断 
==和if的判断是不一样的
比如 if(2) 是true,但是 2 == true 是false,因为在==时,是把布尔值转换为数字类型在进行比较,这个时候 true是1,所以在==时,只有1==true是 ture。
同样的在if里,数字类型只有0是false,因为其余的转为布尔类型是,都是true。
引用对象都为true
小tips
1: 条件语句可以用 && 代替 比如  a&& b  就是if(a) && b
2:别的语言喜欢把-1当做false,放在js里,你可以用 if(~flag) 来使-1返回false。
~是按位取反,按照取反再减一来运算,
比如你要判断indexof 
那么 if(~xxx.indexof(‘x‘) ) 比 if(xxx.indexof(‘x‘) > -1) 漂亮的多。
15


[]==[]


 无论是== 还是=== 判断的都是索引值。
=赋予的也是对象的索引,所以千万不要 a=b=[] 这样子赋值,会是噩梦的。
16


‘5‘ + 3
‘5‘ - 3


 53和2,因为在遇到减号时,会先转换为数值类型。
那么 3 + ‘5’ - 3是多少呢? 是32。
那如果我们要字符串类型转换为数字类型呢?
+str  或者 str*1。
像上面那样 str在中间,就尽量用*1吧 、
17
我不明白,也没找到··· 试了好多组数字,找到了点规律··· 但是依旧不明白为什么···
18 pass
19 arguments,严格模式下就不会被更改了。
相应的,还有一个全局变量undefined,在严格模式下也不会可以被修改。
但是你依旧可以用function undefined来修改。
有的闭包会传一个undefined的参数,就是怕在全局被复写了。
20,21,22,23,
pass
24
2.toString() 报错是因为解析器把‘.‘解析为了浮点数的‘.‘。所以如果你要用写符合这种语义的代码就要:

25


(function(){
var x = y = 1;
})();
console.log(y);
console.log(x);


 y是全局。
来点复杂的,还记得那三道面试题吗?


var a = 10;
function test() {
a = 100;
alert(a);
alert(this.a);
var a;
alert(a);
}
test();

 

 答案是 100 10 100
因为


var a = 10;
function test() {
var a;
a = 100;
alert(a);
alert(this.a);
//var a; 声明提前
alert(a);
}
test();


 这里还涉及到了一个作用域问题。
最后统一说一下吧。


var a = 100;
function test(){
alert(a);
var a = 10;
alert(a);
}
test();

 

 同样是声明提前 所以 第一个alert是undefined。


var a = 100;
function test(){
alert(a);
a = 10; //去掉了var 就变成定义了全局变量了
alert(a);
}
test();
alert(a);


 这个最简单其实,别被前两个弄蒙就ok了。
26
记住即可
27同15
28,29, pass
30


function foo() { }
var oldName = foo.name;
foo.name = "bar";
[oldName, foo.name]

 

 function的name问题。


function foo() {}
alert(foo.name)
var foo2 = function (){}
alert(foo2.name)


 那这道题呢?
答案是 foo,undefined。
因为第二个是吧匿名函数复制给了foo2,所以没有name。
谢谢周同学为我解惑。
31 同1
32 同30
33 pass
34


[,,,].join(", ")


 arr允许最后一个为逗号。
还记得那个最简单的验证ie浏览器的代码吗?
!+[1,]
就是因为低版本(9以前?忘记了)的bug,[1,]在ie下toString是1,而不是1。
35
别用关键字,总不会出问题。
 
ok,大概就这些。在说一下这里面很少涉及的this问题。
构造函数是有作用域的
所以



a,b() 这种类型的作用域就是a。
但是····要记住this只在执行时才会绑定,所以

当你把a.b 付给了c时候,this有指向了全局了···
那么如果这样呢?

里面外面都是一样的,当你执行的是 func() 的时候,都会指向全局。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标WEB前端JavaScript频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程