从名字可以看出来,赋值运算符是用来给变量赋值的。开发者经常会把它和相等比较运算符混淆。
来看一个例子:
const name = 'javascript'; if ((name = 'nodejs')) { console.log(name); } // output - nodejs
在这个例子里,它其实并没有比较变量 name 和字符串 'nodejs' ,而是把 'nodejs' 分配给了 name,因此最后打印出来的是 'nodejs'。
在 JavaScript 里,双等号和三个等号(==, ===)都叫作比较运算符。
对上面的代码来说,下面才是比较两个值正确的做法:
const name = 'javascript'; if (name == 'nodejs') { console.log(name); } // no output // OR if (name === 'nodejs') { console.log(name); } // no output
这两个比较运算符的区别是:两个等号是宽松的比较,三个等号是严格的比较。
宽松比较只比较值,严格比较会同时比较值和数据类型。
下面的代码能解释得更清楚:
const number = '1'; console.log(number == 1); // true console.log(number === 1); // false
给变量 number 分配一个字符串类型的值 1。如果用双等号去比较它和一个数值类型的 1 的话,会返回 true,因为两个值都是 1。但是如果用三个等号去比较,就会返回 false,因为两个值是不同的数据类型。