变量运算之类型转换的坑

前端开发 · 2022-06-07

字符串拼接

const a = 100 + '100'; // '100100'
const b = 100 + 10; // 110
const c = true + '100'; // 'true100'
只要有字符串运算就不在是加法,而是字符串拼接

== 运算符

100 == '100' //true
0 == '' //true
0 == false //true
false == '' //true
null == undefined //true
== 会类型转换尽量让值去相等

=== 运算符

// 除了==null外,其余全部使用 === 
const obj = { x:100 }
if (obj.a == null) {
//这里相当于 obj.a === null || obj.a === undefined,简写形式
//这是jquery源码中推荐的写法
}

if语句

truly变量:两步非运算等于true( !!a === true )的变量

falsely变量:两步非运算等于false (!!a === false) 的变量

// 以下是falsely变量。除此之外都是truly变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false
if语句判断的就是falsely变量和truly变量,不是判断true和false
// truly变量
var a = true;
if(a){
//....
}

var b = 100;
if (b) {
//....
}

// falsely变量
var c = '';
if (c) {
//...
}

逻辑运算

console.log(10 && 0); //0
console.log('' || 'abc'); //abc
console.log(!window.acb); //true

// 判断一个变量会被当做true还是false
var a = 100;
console.log(!!a);//true
逻辑运算和if语句一样也是判断falsely变量和truly变量
Theme Jasmine by Kent Liao