初试JS之零碎知识点

关于!与!!

大家都知道!是求非的意思。在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则会直接把运算符后边的值赋值给运算符之前的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据类型 转换规则是除了下面六个值被转为false,其他值都视为true。 undefined null fals...
    hjwang1024阅读 245评论 0 0
  • 1.声明 (1). var 名=值; 多个声明用"," ,隔开结束用; (2). 名=值; 2.网页内容输出框...
    战神七小姐阅读 241评论 0 1
  • 如题,读小红书时,说到的特殊字面量、特殊返回值、特殊属性等特殊情况太多了,我这脑子能记住就见鬼了。比如: java...
    张晖阅读 194评论 0 0
  • const : 定义变量不可更改;定义对象可更改、扩展、删除对象属性值,仅仅能做到不可更改引用(重新赋值)而已。 ...
    Sekale阅读 303评论 0 0
  • 10:29 2017/09/18 一、 CSS 1、 清除浮动 1. .clear: both; 2. ove...
    卞卞村长L阅读 317评论 0 0

友情链接更多精彩内容