1 Not a Number是一个数字
全局属性 NaN 的值表示不是一个数字(Not-A-Number),那么它是什么类型?
typeof NaN; // 'number'
所以不是一个数字,是一个数字。
2 + ‘a’ = ?
('b'+'a'+ +'a' +'a').toLowerCase();
以上代码你认为会输出什么?baaa 吗?…
正确答案是:banana
因为对字符串(准确的说,是非数字的字符串)做数值运算会得到Not a number,所以+ ‘a’ 会生成 NaN。
而toLowerCase(),是个障眼法,稍稍隐藏了NaN.
3 最大值比最小值小
Math.min(1, 4, 7, 2); // 1
Math.max(1, 4, 7, 2); // 7
以上很合理。但是在没有参数的情况下,最小值比最大值大。
Math.min(); // Infinity
Math.max(); // -Infinity
Math.min() > Math.max(); // true
原因是:Math.max() - JavaScript | MDN
-Infinity is the initial comparant because almost every other value is bigger, that’s why when no arguments are given, -Infinity is returned.
-Infinity是初始比较值,因为几乎所有其他的值都比较大,这就是为什么当没有给出参数时,-Infinity会被返回。
相反,Math.min() 会返回 Infinity 正无穷大。
4 parseInt(null,24)
parseInt接收两个参数:string值和radix进制值:
- string:被解析的字符串(前后空格会被忽略,若不是字符串,则转换成字符串)
- radix:指定
string(第一个参数)
的基数(2~36,即2 进制
~36进制
),若不传或传0
,则string(第一个参数)
以10 进制
来解析
所以:parseInt(null,24) 是将null值转化成 24 进制。
等于多少?
答案是 23.
首先我们来了解什么是 24 进制。
即24进制就是 数字0-9 加 字符 A-N表示法。
而 parseInt(null, 24) 会将null 值转换成字符串 “Null”,因为第二个字符‘u’不在24进制当中,所以只取第一个字符N,对应24进制是23。
所以 parseInt(“mzhren”,24)得到的值就是22.
5 那么 parseInt(NaN,24) 等于多少?
NaN 与 Null 第1个字符都是N,那应该是也是23吧。
答案当然是否定的。
正确答案是:13511.
因为 NaN 三个字符都符合 24进制,N是23,a是10,所以:
23 * 242 + 10 * 241 + 23 * 240 = 13511
同理,parseInt(1/0,19)等类似的题目,都比较理解了。