Tiven

Tiven

博观而约取,厚积而薄发

天问的个人网站(天问博客),专注于Node.js、Vue.js、React、Vite、Npm、Nginx等大前端技术。不断学习新技术,记录日常开发问题,持续分享coding,极客开源,共同进步。生命不息,奋斗不止... [ hexo blog ]

JS常见易错点


Javascript是一门弱类型语言,很灵活,学习门槛低,容易上手。但同时也容易出现误区,遇到很多坑。本篇就专门用来记录日常开发中的易错点。

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 }

解析:

  1. obj.a = 1 引用类型可直接修改新增属性值
  2. obj = { a: 2 } 改变了引用类型指向
  3. obj.b = 2 新的obj属性值改变 和 原object 无关

二、== 和 === 的区别

  1. 基础类型会做隐式转换再进行比较。
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
  1. 引用类型会调用 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

欢迎访问:个人博客地址