文享日志

一些绕弯弯的题

JavaScript

发表于2018年04月11日10:54:22

更新于2018年04月11日21:52:32

0条评论 123次阅读

一、Map与ParseInt函数

题目如下:

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



解析:

首先来看parseInt。

parseInt(string, radix)

parseInt函数是将字符串解析为数字的函数,需要两个参数。

第一个参数是要解析的字符串


第二个参数


表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

   

map函数

array.map(function(currentValue,index,arr), thisValue)

map函数是Array对象上的原型方法,用来遍历实例数组。


参数描述:

currentValue  必须。当前元素的值

index 可选。当期元素的索引值

arr 可选。当期元素属于的数组对象

thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。

如果省略了 thisValue ,"this" 的值为 "undefined"


看完两个函数的用法,答案也就明了了。

['1','2','3'].map(parseInt);

map函数向参数函数(此例是parseInt)传递三个参数,而parseInt函数接收了两个。

当字符串'1'传入,其引索0也传入了。所以以默认10进制解析。

当字符串'2'传入,传入引索1。参数错误,所以返回了NaN。表明这是一个不能解析的数字。

当字符串'3'传入,传入引索2。二进制中没有3,参数错误,所以返回NaN。


所以答案是:[1,NaN,NaN];


二、变量提升与类型验证

题目如下:

var name = 'World';
(function() {
  if (name === 'undefined') {
    var name = 'Jack';
    console.log('goodbye',name);
  }else{
    console.log('hello',name)
  }
})()


解析如下:

稍微有点经验的人看到if语句中声明变量,变量会提升。但是不要忘了if条件中的全等undefined是字符串类型。

所以答案是:hello , undefined 。


然后看看这个:

var name = 'World';
(function() {
  if (typeof name === 'undefined') {
    var name = 'Jack';
    console.log('goodbye',name);
  }else{
    console.log('hello',name)
  }
})();

答案是:goodbye , Jack  


三、数组初始化

题目如下:

var ary = [0,1,2];
ary[10] = 10;
ary.filter(function(x) { return x === undefined;});


解析如下:

没有赋值的数组选项都没有初始化。。所以都遍历不到。。


答案:[]



四、关于arguments

题目:

function sidEffecting(ary) {
  ary[0] = ary[2];
}
function bar(a,b,c) {
  c = 10
  sidEffecting(arguments);
  return a + b + c;
}
bar(1,1,1)


解析如下:

arguments是一个对象,c为arguments[2],修改c的值,实际修改的是arguments[2]...所以传到sidEffecting函数中参数是[1,1,10];


答案:21








无意找到了题目来源,自己可以试着做做看啊。。

http://javascript-puzzlers.herokuapp.com/


这是别人做的解析:

https://blog.csdn.net/ceshi986745/article/details/51698893


👍 0  👎 0
共有0条评论

发表新评论

提交

广告展示

腾讯云推广 阿里云推广