zoukankan      html  css  js  c++  java
  • 经典面试题:以下代码将输出的结果是什么?

    1.请看下面这段很短的代码,运行的结果是什么?

    答案解析:

      typeof主要用于检测基本数据类型,typeof返回的结果有number,string,boolean,function,object,undefined,而null表示空对象指针,返回object主要是个人理解的吧,undefined表示变量被声明了,但没有赋值,要注意的是任何使用new创建的都是对象。

      typeof null结果是object, 这是个历史遗留bug,在ECMA6中, 曾经有提案为历史平反, 将type null的值纠正为null, 但最后提案被拒了. 理由是历史遗留代码太多, 不想得罪人, 不如继续将错就错当和事佬。 而instanceof用于判断一个变量是否某个对象的实例,也就是问我们 null 是不是Object的一个实例。 对于Null类型的值(只有null),规范定义了typeof null返回"object"这个字符串。但是本质上Null和Object不是一个数据类型,null值并不是以Object为原型创建出来的。所以是得到的结果是false。

    2.请看下面这道题,运行的结果是什么?

    答案解析:

    这道题的正确是答案是:D [1,NaN,NaN]。

       首先,我们了解了数组中map的作用,map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理的后值。也就是map会把数组["1", "2", "3"]遍历一遍,并传入parseInt函数中去进行处理。 那么很多人就觉得,把数组中的"1","2","3"进行parseInt处理之后,不就是得到数字1,2,3了吗? 但我们忽略了,map给处理函数传的参数不是简单地把数组的每个元素传进去,实际上它会传3个参数(value,index,array)。分别是数组的元素,索引和整个数组。如果忽略了这一点,就很容易答错这道题。

      也就是数组都调用了parseInt方法。因为callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。而parseInt方法是可以接收两个参数的,第一个为被转化的值,第二个为被转化值的进制。map自动传入的第二个参数被当做进制了,也就是数组的index被当做进制数了。当进制数为0时,默认为10进制,故结论数组第一个值为1,。当parseInt的进制参数小于2或者大于36,就返回NaN,因此第二个值为NaN。第三个值为NaN的原因是相当于执行了parseInt("3","2"),而2进制下数字3是不存在的,也返回了NaN。

  • 相关阅读:
    泉音作伴到云乡
    给力品牌营销,打造自己的知名度品牌
    【linux】如何利用mkfifo命令让程序产生的文件直接生成压缩文件
    【linux/perl】终端运行的程序怎么屏蔽错误信息的输出?
    四个俄罗斯人算法(Method of Four Russians)
    perl 释放内存问题【转】
    【perl】perl实现case条件判断的语句
    【linux】/dev/null与/dev/zero详解
    【perl】打开多个文件——文件句柄的使用
    EM算法——最大期望算法(Expectationmaximization algorithm)
  • 原文地址:https://www.cnblogs.com/yzhihao/p/8528871.html
Copyright © 2011-2022 走看看