javascript专业八级测试答案整理
前几天社区的群里森破发了一个这样的链接:
http://ourjs.com/detail/52fb82e13bd19c4814000001
做了一遍后突然对人生感到了迷茫,本着不能只有我一个人伤心的原则,只要是程序员的好友我都发了一遍给他们答。
最近亚马逊书满减,凑单买了本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() 的时候,都会指向全局。
好啦,恶心人的东西解决完了,如果有错误或者补充,希望下面留言。
javascript专业八级测试答案整理的更多相关文章
- 近5年常考Java面试题及答案整理(三)
上一篇:近5年常考Java面试题及答案整理(二) 68.Java中如何实现序列化,有什么意义? 答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写 ...
- 近5年常考Java面试题及答案整理(二)
上一篇:近5年常考Java面试题及答案整理(一) 31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"x ...
- 蓝桥杯java历年真题及答案整理1~20.md
蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...
- JavaScript专业规则12条
学习JavaScript是困难的.它发展的如此之快,以至于在任何一个特定的时刻,你都不清楚自己是否“做错了”.有些时候,感觉像是坏的部分超过了好的部分.然而,讨论这些并没有意义,JavaScript正 ...
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- Javascript的简单测试环境
在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很好的例子,既让我们得到了一个好用的小工具 ...
- 《javascript个人理解,个人整理。》
万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...
- Javascript学习-简单测试环境
Javascript学习-简单测试环境 在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很 ...
- 2018年,最经典的26个JavaScript面试题和答案!
根据 Stack Overflow 的 2018 年度调查,JavaScript 连续六年成为最常用的编程语言.所以我们必须面对这样的现实,JavaScript 已经成为全栈开发技能的基石,在全栈开发 ...
随机推荐
- Python3 安装xlrd、xlwt、xlutils
Python版本3.4,装xlrd和xlwt和xlutils的时间:2017-09-07. 安装xlrd.xlwt.xlutils很简单,直接[pip install xlrd].[pip insta ...
- 阿里云OSS Web端直传 服务器签名C#版
最近用到队里OSS的文件上传,然后阿里官方给的四个服务器签名有Java PHP Python Go四个版本,就是没C#(话说写个C#有多难?) 百度了一下好像也没有,既然这样只能自己动手照着Java版 ...
- redis.clients.jedis.HostAndPort - cant resolve localhost address
阿里云ECS部署spring-boot访问redis出现redis.clients.jedis.HostAndPort - cant resolve localhost address 摘要: 阿里云 ...
- slatstack Master的配置
Salt系统非常简单并且易于配置,Salt系统的两个组件都有各自的配置文件.如"salt-master"是通过主配置文件来配置的,"salt-minion"是通 ...
- python的算法:二分法查找(2)--bisect模块
Python 有一个 bisect 模块,用于维护有序列表.bisect 模块实现了一个算法用于插入元素到有序列表.在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高.Bisect 是二 ...
- postman用法总结+newman持续集成
一.postman 1.GET 请求:点击Params,输入参数及value,可输入多个显示在URL链接上(GET请求的请求头与请求参数如在接口文档中无特别声明时可以不填) 2.POST请求:在bod ...
- 实现用http上传文件,用ftp下载文件
1.ftp配置 1.检查安装vsftpd软件 使用如下命令#rpm -qa |grep vsftpd可以检测出是否安装了vsftpd软件, 如果没有安装,使用YUM命令进行安装. 2.启动服务 使用v ...
- 第3天-DIV+CSS布局
盒子模型 margin 设置外边距宽度 有4个值的时候: maigin 10px 5px 15px 20px; (上.右.下.左)有3个值的时候: margin: 10px 5px 15px; (上. ...
- 15、Django实战第15天:我要学习咨询
今天完成的是课程机构列表页面的最后一个模块:我要学习 我们在models中创建对应的表时UserAsk.之前我们讲过:在做表单的时候,我们可以通过forms先对提交的数据做验证,之前我们使用的是For ...
- [BZOJ4897][THUSC2016]成绩单(DP)
4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 220 Solved: 132[Subm ...