美文网首页
初试JS之零碎知识点

初试JS之零碎知识点

作者: __拼搏__ | 来源:发表于2022-04-14 15:29 被阅读0次

关于!与!!

大家都知道!是求非的意思。在js中有以下数据,会得到true

console.log(!undefined); 
console.log(!null);
console.log(!false);
console.log(!'');

其余情况均为fasle。

console.log(!{});
console.log(![]);
console.log(!true);
console.log(!'1');
console.log(!1);

注意,用!求非一个空字符串得到的结果是fasle。而求非空数组空对象得到的结果是 ture

所以!!就很好解释了。就是对某个值求非之后,再次求非。也就是求两次非。简称双非运算
这里注意单次求非里的特殊情况,console.log(!false)的结果,是ture
所以关于!!的不太精准的意思是:如果对一个正常的值,做该运算,返回的就是true.如果对一个未定义或者空值做该运算,返回的就是fasle。
而对该运算准确的解释是:如果对一个undefinednullfalse空字符串做该运算,得到的就是fasle。其余值,均为ture。
所以这种双非运算,不太适合理解成非空判断,因为空对象与空数组得到的结果也会是true。

关于?.

直接看代码:

let a;
console.log(a.name); //报错Cannot read property 'name' of undefined
console.log(a?.name); //正常输出,输出结果为undefined。

这是对象未定义的情况,那么对象已定义,但是没定义相关属性呢?

let a = {};
console.log(a?.name);//输出结果依然是undefined。

所以?.的正确用法是:
如果不确定一个对象是否已经定义了,也不确定该对象需要使用的属性是否已经定义了,那么可以在该对象与属性的点式调用中间加上?
那么,如果该对象未定义或者该对象点式调用属性未定义,就不会导致程序报错,而会返回undefined。

效果等同于a && a.name
所以在vue中,一个组件需要根据一个对象的属性值是否存在而显示或隐藏时,就可以利用?.语法简化代码。
因为if判断等同于双非判断!!。所以if(undefined)就相当于if(false)

关于??

这是用来判断某个值是否为undefined或者null。如果是,就返回??后提供的值。如果不是,则直接返回该值。
上代码:

console.log(undefined??'111');//输出111
console.log(null??'111');//输出111

相反的如果结果,就会输出原本的值

console.log(''??'111');//输出空字符串
console.log(fasle??'111');//输出fasle

还有??=。如果??=之前的值为undefined或者null则会直接把运算符后边的值赋值给运算符之前的值。

相关文章

网友评论

      本文标题:初试JS之零碎知识点

      本文链接:https://www.haomeiwen.com/subject/rtitertx.html