来源:HowtoconvertavaluetoBooleaninunsplashJavaScript?这篇文章将帮助您完成它!我们往下看~Stringconststring='string';!!string;//trueBoolean(字符串);//true这里小编建了一个前端学习交流按钮群:132667127,自己整理的最新前端资料和进阶开发教程,喜欢的可以进群学习交流数值constnumber=100;!!数;//trueBoolean(数字);//JavaScript中的truefalse值,有6个false值。如果这些字符串中的任何一个被转换为布尔值,它将变为假。falseundefinednullNaN0""(空字符串)任何不是false值的值都将转换为true。错误值的示例应用:!!false;//false!!undefined;//假!!空;//错误!!NaN;//错误!!0;//错误的!!'';//falsevoid在布尔上下文中应用值:Boolean(false);//falseBoolean(undefined);//falseBoolean(null);//falseBoolean(NaN);//假布尔值(0);//falseBoolean('');//false小心'false'constvalue='false';!!value;//真布尔值(值);//true注意“false”必须写在引号之间。虽然是一个虚拟值,但它实际上是一个字符串。大多数人不会上当受骗,但还是要时刻保持警惕。图片来源:digilentin如何先操作代码!将该值转换为布尔值并将其取反。在上下文中,!值将变回假值。所以要将值恢复为真,再放一个“!”进入运行,所以有两个!.constvalue='string';!value;//假!!价值;//trueSpeedtestbooleanvs!!看起来像!!但测试速度比布尔快。来源:unsplash有些人更喜欢布尔值,因为它更明确。但是,正如KyleSimpson在《你不知道的JavaScript》中提到的那样,两者都是确定的。//better(worksexplicitly):if(!!a){}//alsogreat(worksexplicitly):if(Boolean(a)){}这里不会给你一个标准答案,你可以根据自己的需要选择.我会继续用!!在我的个人开发项目中,打字更少,而且我对语法有所了解。反之,如果作为一个团队考虑,作者可能会选择Boolean。大多数开发人员更了解这一点。无论选择哪一种,最重要的是保持代码一致,不要来回切换,选择一种并坚持下去。这更像是一种偏好选择,不要剥夺自己对这两种代码的理解。避免使用原语而不是对象类型的newBool??eanvarstr='str';//AvoidtypeofnewBoolean(str);//对象//PreferredtypeofBoolean(str);//布尔类型!!str;//booleanCJJ.:值得注意的是,不幸的是,newBoolean不是一个布尔值,而是一个布尔值的例子。基元更便宜,应该优先于对象类型使用。CJJ.:newBoolean(str)可以返回一个对象类型。Boolean(str)只是返回布尔值的原始值。我猜Boolean(str)比!!str快。因为只是一个操作,但是也有可能是浏览器进行了优化让程序员看到!!他们知道直接将参数转换为布尔原语(而不是实际连续两次执行NOT())。CJJ.:基元是廉价的,它们是不可变的,因此可以共享引用而无需在实例上保留任何状态。或真或假。但是newBool??ean(str)是一个对象。它有自己唯一的存储地址,可以保存唯一的内部状态。这意味着它不能只持有对不可变单例实例的引用。每次运行newBoolean(str)都会实例化一个全新的Boolean()对象。特别鸣谢:CJJ图源:sitepoint使用布尔构造函数去除空字符串CJJ.:这是经典的例子。如果你得到一个逗号分隔的字符串值列表,想要过滤掉空字符串,你可以将布尔构造函数传递给Array.prototype.filter,它会自动去除零长度字符串,只留下一个有效的字符串数组.varstr='some,list,,of,values';vararr=str.split(',');arr;//['some','list','','of','values']arr.filter(Boolean);//['some','list','of','values']特别感谢:你学过CJJ吗?
