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了。