大厂面经---js面试常见考察基础题

1. typeof

typeof null === ‘object’ // true

2. NaN
typeof(NaN)        // "number"
alert(NaN == NaN)  // false,NaN和任何值都不相等
alert(NaN === NaN)  // false,任何涉及 NaN的操作都会返回NaN。
2.1 哪些情况会返回NaN
  1. 计算
    JS 在进行加减乘除运算之前,会先调用 Number()方法,将非数值的运算项转化为数值,如果转换失败就返回NaN:
1-'a'; // NaN
1-'1'  // 0
  1. 类型转换
'1'+2+3
//记住,parseInt是尽量转化成功
parseInt('123ab') //123
Number('123ab')  // NaN
Number('123')    // 123

Number([]);  // 0
parseInt([]);  // NaN
parseFloat([]);  // NaN

Number([]);  // 0
parseInt([]);  // NaN
parseFloat([]);  // NaN
2.2 isNaN和Number.isNaN

isNaN 是window对象的一个方法,比较诡异的是:isNaN(x)并不是判断参数x本身是不是NaN,而是判断Number(x)是不是NaN。

// isNaN原理
var isNaNA = function(value) {
    var n = Number(value);
    return n !== n;
};
isNaN(NaN);  // true
isNaN(123);  // false
isNaN('abc');  //true
isNaN('123abc'); //true

isNaN({});  // true,因为Number({})=NaN
isNaN('');  // false, 因为Number('')=0
isNaN([]);  // false,因为Number([])=0

Number.isNaN 修复了isNaN(), 不会强制转化参数,直接对参数本身做判断,这样只有参数显示等于NaN,才会返回true.

// 原理
function isNaNC (value) {
    return typeof(value) === "number" && isNaN(value);
}
3. 常规题目
3.1 连续赋值的输出
function A(){
	var a = b = 100
}
A()
console.log(a) // 报错
console.log(b) // 100, 这里的b是全局变量
3.2 js精度问题
console.log(0.1+0.2 === 0.3) // false
console.log(0.3+0.2 === 0.5) // true

主要是计算机对数字的存储是以二进制方式,有些小数转化成二进制的时候会变成一个无限循环的树,造成了精度的问题。

解决问题方式:

  • 设置一个误差值

if (!Number.EPSILON) {
     Number.EPSILON = Math.pow(2, -52);
}
function numbersCloseEnoughToEqual(a, b) {
     return Math.abs(a - b) < Number.EPSILON
}
  • 同时扩大100倍
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值