1、?. 值是undefined时不会报错,表示该对象中有无该属性,有才使用 obj?.name
// ?. ??是es10中出现的,需要皮质babel
使用时需要安装插件
npm install --save-dev @babel/plugin-proposal-optional-chaining
配置babel
// .babelrc 或者 babel.config.js 文件添加 plugins 配置
{
"plugins": [
"@babel/plugin-proposal-optional-chaining"
]
}
2、a() && b()
3、a() || b() 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
4、if(value) {} value: 0 、-0、null、"" 、false、undefined、NaN都是false, 其余都是 true
5、|| 和 ??区别
??处理undefined和null更为简洁,返回第一个已定义的值
||返回表达式中第一个真值
let r1 = 0 ?? 1 ?? 2 // 0
let r2 = 0 || 1 || 2 // 1
let r3 = false ?? 1 ?? 2 // false
let r4 = false || 1 || 2 // 1
6、== 和 ===
==用于一般比较,比较之前会做数据类型转换,让他们呢尽可能相等
- -如果一个是null,一个是undefined,那么相等
- 如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
- 如果一个值是true/false则将其转为1/0比较
- 如果一个值是对象,一个是数字或字符串,则尝试使用valueOf:指向对象的原始值和toString转换后比较
- 其它就不相等了
console.log(‘’ == 0) // true console.log([] === '') // true [].toString = '' [1,2,3,4].toString() // 1,2,3,4 [{id: 1, name:'a'}].toString() // [object Object]
===用于严格比较