["1", "2", "3"].map(parseInt)
1、知识点:
首先,map接受两个参数,一个回调函数 callback, 一个回调函数的this值。其中,回调函数接受三个参数 currentValue、index、arrary(当前值,索引,整个数组);而题目中,map只传入了回调函数:parseInt。
其次,parseInt 只接受两个两个参数 string、radix(基数)。所以这string就相当于参数currentValue,radix就相当于参数index
//所以本题即问 parseInt(‘1‘, 0); parseInt(‘2‘, 1); parseInt(‘3‘, 2); //首先后两者参数不合法。其中0,1,2就是索引index //所以答案是 [1, NaN, NaN]
理解本题最主要是要知道:(1)map的回调函数的3个参数含义;(2)parseInt只能接受2个参数,及参数含义
[typeof null, null instanceof Object]
2、两个知识点:
typeof 返回一个表示类型的字符串。
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
这个题比较简单,答案就是: ["object", false]。typeof 的结果请看下表:
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]
3、知识点:
arr.reduce(callback[, initialValue])
reduce接受两个参数,一个回调,一个初始值。
回调函数接受四个参数 previousValue, currentValue, currentIndex, array
需要注意的是 If the array is empty and no initialValue was provided, TypeError would be thrown.
所以第二个表达式会报异常。第一个表达式等价于 Math.pow(3, 2) => 9; Math.pow(9, 1) =>9
答案 an error
注意:reduce和map打出来的参数不一样。相当于数组[3,2,1]完全成为了回调函数的参数,然后回调函数Math.pow(3,2)=9,再作为previousValue参数传给回调函数。那么第二行的
currentValue
=1是怎么回事呢?我们再验证下:
也就是说previousValue
就是索引0的值,索引从1开始,然后currentValue就是当前数组的索引的值。然后依次往下,理解这点比较重要。
var val = ‘smtg‘; console.log(‘Value is ‘ + (val === ‘smtg‘) ? ‘Something‘ : ‘Nothing‘);
4、两个知识点:
简而言之 +
的优先级 大于 ?
所以原题等价于 ‘Value is true‘ ? ‘Somthing‘ : ‘Nonthing‘
而不是 ‘Value is‘ + (true ? ‘Something‘ : ‘Nonthing‘)
答案 ‘Something‘。虽然这道题都可以答对,但是真正含义不一定都清楚。
var name = ‘World!‘; (function () { if (typeof name === ‘undefined‘) { var name = ‘Jack‘; console.log(‘Goodbye ‘ + name); } else { console.log(‘Hello ‘ + name); } })();
5、这个相对简单, 一个知识点:
在 JavaScript中, functions 和 variables 会被提升。变量提升是JavaScript将声明移至作用域 scope (全局域或者当前函数作用域) 顶部的行为。
这个题目相当于:
var name = ‘World!‘; (function () { var name; if (typeof name === ‘undefined‘) { name = ‘Jack‘; console.log(‘Goodbye ‘ + name); } else { console.log(‘Hello ‘ + name); } })(); //所以答案是 ‘Goodbye Jack‘
var END = Math.pow(2, 53); var START = END - 100; var count = 0; for (var i = START; i <= END; i++) { count++; } console.log(count);
6、一个知识点:
在JS里,Math.pow(2,53)是可以表示最大值的,最大值加1还是最大值,所以循环不会停。
JS中可以表示的最大整数不是2的53次方,而是1.7976931348623157e+308。2的53次方不是js能表示的最大整数而应该是能正确计算且不失精度的最大整数,可以参见js权威指南。9007199254740992 +1还是 9007199254740992 ,这就是因为精度问题,如果 9007199254740992 +11或者 9007199254740992 +111的话,值是会发生改变的,只是这时候计算的结果不是正确的值,就是因为精度丢失的问题。
原文地址:https://www.cnblogs.com/goloving/p/8678696.html