Javascript
是一门弱类型
语言,很灵活,学习门槛低,容易上手。但同时也容易出现误区,遇到很多坑。本篇就专门用来记录日常开发中的易错点。
一、参数为引用类型
的函数
- eg:
let object = { a: 0 };
function fun(obj) {
obj.a = 1;
obj = { a: 2 };
obj.b = 2;
}
fun(object);
console.log(object);
// 对于这个输出结果估计很多人都容易出错
// 你想的结果:
{ a: 2, b: 2 }
// 实际的结果:
{ a: 1 }
解析:
obj.a = 1
引用类型可直接修改新增属性值obj = { a: 2 }
改变了引用类型指向obj.b = 2
新的obj属性值改变 和原object
无关
二、== 和 === 的区别
- 基础类型会做隐式转换再进行比较。
NaN == NaN // false
null == null // true
null == undefined // true
null == 0 // false
null == false // false
undefined == 0 // false
undefined == false // false
0 == '0' // true
NaN === NaN // false
null === undefined // false
0 === '0' // false
- 引用类型会调用
valueOf
或者toString
方法再进行比较,valueOf 优先于 toString。
var o = {}
var a = o
var b = o
a == b // true
var c = {}
var d = {}
c == d // false
c.valueOf() == d.valueOf() // false
c.toString() == d.toString() // true
var d1 = new Date('2022-01-01')
var d2 = new Date('2022-01-01')
d1 == d2 // false
欢迎访问:个人博客地址