javascript 经典问题汇总

1. ["1","2","3"].map(parseInt) 为多少?

答:[1,NaN,NaN]

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

原数组中的元素经过该方法后返回一个新的元素。

currentValue

callback的第一个参数,数组中当前被传递的元素。必须。

index

callback的第二个参数,数组中当前被传递的元素的索引。可选

array

callback的第三个参数,调用 map 方法的数组。可选

thisValue. callback函数里的this值 默认是window对象

parseInt(string, radix)

string: 需要转化的字符,如果不是字符串会被转换,忽视空格符。

radix:数字2-36之前的整型。默认使用10,表示十进制。

需要注意的是,如果radix在2-36之外会返回NaN。

因为parseInt函数接收2个参数,string,radix,如果map函数返回了这两个参数,不管意义是否是所期望的,都会将其作为参数执行。

以1-0-1,2,3为例,map(parseInt)中,parseInt作为callback函数执行的将是:parseInt('1',0)(前面那个数字1自动被转换为字符串1),其他同上。

看下面的执行函数结果

parseInt('1', 0);

parseInt('2', 1);

parseInt('3', 2);

所以遍历的结果是数组的第一个元素是可以正常显示。传入的键值为1,键名为0 输出1

而第二次 传入键值为2,键名为1 输出NaN 因为1进制的不可能会大于1的。

第三次传入键值为3,键名为2 输出了NaN 同样的,二进制是不会出现3的。

所以得到1,NaN,NaN

2.var a = b =10;

(function(){

var a = b = 20;

})();

console.log(a);

console.log(b);

问:输出的 a = ? b = ?

答:a=10 ,b=20

连等的问题。所以说连等不要随便乱用。

连等赋值的时候,如a = b = c;

这个执行顺序从右往左。

就相当与b = c;a = b;

并不是 b=c; a = c;

所以回到题目。

一开始是var a = b = 10;

这个时候就是b = 10;var a = b; 所以a = 10; 因为js 的var声明不在严格模式下的话,是可以不用写的,因为b 不存在,所以也自动声明了。

之后再在一个立即执行函数里面,在这个作用域下执行了var a = b = 20;

就相当于b = 20 ;var a = b; 因为这时候b在全局外部已经声明了所以修改的就是全局的变量。

而a前面还有var ,所以这个a只是针对该作用域下的变量。并没有修改全局变量的a.

所以在全局外部打印a = 10 b = 20了。