前几天社区的群里森破发了一个这样的链接:

http://ourjs.com/detail/52fb82e13bd19c4814000001

做了一遍后突然对人生感到了迷茫,本着不能只有我一个人伤心的原则,只要是程序员的好友我都发了一遍给他们答。

最近亚马逊书满减,凑单买了本javascript实用代码段的书,结果发现原来那个所谓八级测试的始作俑者就是这本··· 结果竟然没有答案···

遂觉得还是整理一遍的好,加上之前自己的一些笔记,和一些扩展,写个总结发出来记录一下。

1,

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

这东西无非是函数参数问题,记得住就答得出来,真没什么卵用。

主要是parseInt的第二个参数,是解析数字的基数,也就是进制,范围为2~36。

比如这道题的第二个运行结果 就是 parseInt('2',1);  参数不符 故是NAN。

第二个运行结果 parseInt('3',2); 二进制里没有3,所以也是NAN。

2

  1. [typeof null, null instanceof Object]

null,array的 typeof 都是object。

但是instanceof还是很严谨的。

不过以下需要注意:

1. instanceof 是判断前者是否为后者的一个实例,所以

2.判断一个变量的类型上面两种都不好要用这个:

Object.prototype.toString.call(XXX).slice(8,-1);

3

  1. [ [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的提前声明。

代码等同于:

  1. var name = 'World!';
  2. (function () {
  3. var name;
  4. if (typeof name === 'undefined') {
  5. name = 'Jack';
  6. console.log('Goodbye ' + name);
  7. } else {
  8. console.log('Hello ' + name);
  9. }
  10. })();
 

所以name是undefined;

6 js最大的数是2^53。

7 pass

8

js没有精确的数值,是因为十进制在转换为计算机用二进制时候的丢失导致的。该死的js并没有对这个误差进行处理。

9,10

switch 用 === 进行枚举,记住即可。

另外周同学上次在社区 群里提到的:

=== 是不触发toString的。

11 pass

12 同1

13 pass

14

  1. var a = [0];
  2. if ([0]) {
  3. console.log(a == true);
  4. } else {
  5. console.log("wut");
  6. }

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

  1. []==[]

无论是== 还是=== 判断的都是索引值。

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

16

  1. '5' + 3
  2. '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

  1. (function(){
  2. var x = y = 1;
  3. })();
  4. console.log(y);
  5. console.log(x);

y是全局。

来点复杂的,还记得那三道面试题吗?

  1. var a = 10;
  2. function test() {
  3. a = 100;
  4. alert(a);
  5. alert(this.a);
  6. var a;
  7. alert(a);
  8. }
  9. test();
 

答案是 100 10 100

因为

  1. var a = 10;
  2. function test() {
  3. var a;
  4. a = 100;
  5. alert(a);
  6. alert(this.a);
  7. //var a; 声明提前
  8. alert(a);
  9. }
  10. test();

这里还涉及到了一个作用域问题。

最后统一说一下吧。

  1. var a = 100;
  2. function test(){
  3. alert(a);
  4. var a = 10;
  5. alert(a);
  6. }
  7. test();
 

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

  1. var a = 100;
  2. function test(){
  3. alert(a);
  4. a = 10; //去掉了var 就变成定义了全局变量了
  5. alert(a);
  6. }
  7. test();
  8. alert(a);

这个最简单其实,别被前两个弄蒙就ok了。

26

记住即可

27同15

28,29, pass

30

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

function的name问题。

  1. function foo() {}
  2. alert(foo.name)
  3. var foo2 = function (){}
  4. alert(foo2.name)

那这道题呢?

答案是 foo,undefined。

因为第二个是吧匿名函数复制给了foo2,所以没有name。

谢谢周同学为我解惑。

31 同1

32 同30

33 pass

34

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

arr允许最后一个为逗号。

还记得那个最简单的验证ie浏览器的代码吗?

!+[1,]

就是因为低版本(9以前?忘记了)的bug,[1,]在ie下toString是1,而不是1。

35

别用关键字,总不会出问题。

ok,大概就这些。在说一下这里面很少涉及的this问题。

构造函数是有作用域的

所以

a,b() 这种类型的作用域就是a。

但是····要记住this只在执行时才会绑定,所以

当你把a.b 付给了c时候,this有指向了全局了···

那么如果这样呢?

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

好啦,恶心人的东西解决完了,如果有错误或者补充,希望下面留言。

javascript专业八级测试答案整理的更多相关文章

  1. 近5年常考Java面试题及答案整理(三)

    上一篇:近5年常考Java面试题及答案整理(二) 68.Java中如何实现序列化,有什么意义? 答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写 ...

  2. 近5年常考Java面试题及答案整理(二)

    上一篇:近5年常考Java面试题及答案整理(一) 31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"x ...

  3. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

  4. JavaScript专业规则12条

    学习JavaScript是困难的.它发展的如此之快,以至于在任何一个特定的时刻,你都不清楚自己是否“做错了”.有些时候,感觉像是坏的部分超过了好的部分.然而,讨论这些并没有意义,JavaScript正 ...

  5. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  6. Javascript的简单测试环境

    在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很好的例子,既让我们得到了一个好用的小工具 ...

  7. 《javascript个人理解,个人整理。》

    万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...

  8. Javascript学习-简单测试环境

    Javascript学习-简单测试环境 在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很 ...

  9. 2018年,最经典的26个JavaScript面试题和答案!

    根据 Stack Overflow 的 2018 年度调查,JavaScript 连续六年成为最常用的编程语言.所以我们必须面对这样的现实,JavaScript 已经成为全栈开发技能的基石,在全栈开发 ...

随机推荐

  1. DIV+CSS设置及问题总结

    HTML 中有用的字符实体 注释:实体名称对大小写敏感! 显示结果 描述 实体名称 实体编号   空格     < 小于号 < < > 大于号 > > & ...

  2. MYSQL是什么?

    #转载请联系 数据库主要分为两大类,关系型数据库和非关系型数据库.MYSQL是关系型数据库. 一.什么是关系型数据库呢? 1.关系型数据库,本质上是使用一张二维表来表示关系,和Excel表类似. 2. ...

  3. 《Java编程思想》笔记 第十七章 容器深入研究

    1 容器分类 容器分为Collection集合类,和Map键值对类2种 使用最多的就是第三层的容器类,其实在第三层之上还有一层Abstract 抽象类,如果要实现自己的集合类,可以继承Abstract ...

  4. Redis 源码走读(一)事件驱动机制与命令处理

    eventloop 从 server.c 的 main 方法看起 int main(int argc, char **argv) { ....... aeSetBeforeSleepProc(serv ...

  5. zabbix获取到的数值自定义单位

    1) 查找php文件 # find / -name "func.inc.php" /usr/share/zabbix/include/func.inc.php 2)修改文件 #vi ...

  6. 清理tomcat缓存

    解决方案:删除work目录的内容,注意不能删除work目录,不然会出现404错误 rm -rf /usr/local/tomcat/work/*

  7. XSS && CRLF && property&attribute

    XSS cross-site scripting 跨站点脚本,为了避免与css冲突,命名为XSS.它是将恶意代码作为一个网页内容,这些恶意代码会注入到用户的浏览器中并执行,从而使用户受到攻击,常见的有 ...

  8. 4、Flask实战第4天:自定义url转换器

    url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...

  9. 在小程序开发中使用 npm

    微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发人员在熟悉了 npm 生态环境后,对微信小程序诟病的地方. 微信小程序在 2.2.1 版本后增加了对 npm 包加载的支持,使得小 ...

  10. ubuntu 进入 pycharm(社区版)

    先进入到pycharm所在的目录,然后进入bin 然后./pycharm.sh 例如,我把pycharm 放在桌面上 su ➜ xushukui cd '/home/xushukui/桌面/pycha ...