javascript的小技巧

1.parseInt太小的数字会产生bug
parseInt(0.00000000454); // 4
parseInt(10.23); // 10

 

2.计算

1 + null// 1
1 + undefined// NaN
Number(null) // 0
Number(undefined) // NaN

 

3.实参arguments和形参会保持同步关系

function test(a, b, c) {
console.log(a, b, c); // 2, 3, undefined
arguments[0] = 100;
arguments[1] = 200;
arguments[2] = 300;
console.log(a, b, c); // 100, 200, undefined
}
test(2, 3);

 

4.void是个固执的老头(跟谁都不沾亲)

void0 === undefined// true
void1 === undefined// true
void {} === undefined// true
void'hello' === undefined// true
voidvoid0 === undefined// true

5.try/catch/finally也有特定的执行顺序

function fn1() {
console.log('fn1');
return1;
}

function fn2() {
console.log('fn2');
return2;
}
function getData() {
try {
thrownewError('');
} catch (e) {
return fn1();
} finally {
return fn2();
}
}

console.log(getData());
// 打印顺序: 'fn1', 'fn2', 2

解析:在try/catch代码块中,如果碰到return xxyyzz;关键词,那么xxyyzz会先执行并把值放在临时变量里,接着去执行finally代码块的内容后再返回该临时变量。如果finally中也有return aabbcc,那么会立即返回新的数据aabbcc

6.是否存在这样的变量x,使得它等于多个数字?
const x = {
value: 0,
toString() {
return ++this.value;
}
}

x == 1 && x == 2 && x == 3;

7.clearTimeout 和 clearInterval 可以互换使用吗
var timeout = setTimeout(() =>console.log(1), 1000);
var interval = setInterval(() =>console.log(2), 800);
clearInterval(timeout);
clearTimeout(interval);
解析:YES。大部分浏览器都支持互相清理定时器,但是建议使用对应的清理函数。

8.null是object类型,但又不是继承于Object,它更像一个历史遗留的bug。鉴于太多人在用这个特性,修复它反而会导致成千上万的程序出错。
typeofnull === 'object'; // true
Object.prototype.toString.call(null); // [object Null]
nullinstanceofObject; // false

8.数据超过了安全值就变得不安全了
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
// 等价于
2 ** 53 === 2 ** 53 + 1; // true

 

9.+0 和 -0 是有区别的
1/+0 === Infinity
1/-0 === -Infinity

posted @ 2021-02-18 10:25  倔强的代码人  阅读(22)  评论(0编辑  收藏  举报