有必要使用双感叹号(!!)来确保对象不是null吗
Is it necessary to use double exclamation points (!!) in order to make sure that an object is not null?
我最近开始在对象之前使用双感叹号!!
,以确保它不是null,没有未定义,也不是空字符串,以确保我包含变量为空的所有不同方式。
这有必要吗?例如,它很难阅读:if(!!name)
与if(name)
对此有什么意见吗?我希望我的代码是安全的,不会陷入空指针异常和其他事情可能发生的情况,但我也想让我的代码可读。
您正在做的事情已经由JavaScript原生完成了。
if( value ) {
}
只要value
不是:
- null
- 未定义的
- NaN
- 空字符串("(
- 0
- 虚假的
请查看规范中的tooolean转换。
不,如果在if
中使用变量作为条件,则根本不需要双爆炸。简单地if (name)
就足以确保name
不是falsy值。所有对象引用都是真实的;null
是伪造的。
这是完全没有必要的,除非您需要与布尔true
进行严格比较,例如:
switch (true) {
case foo:
应该是
switch (true) {
case !!foo:
或者,使用详细但可读性更强的Boolean(foo)
(不要将new
与基元构造函数一起使用(。请注意,相反的情况并非如此,如果您正在测试伪值,那么这将成为一个问题,因为0、NaN
和空字符串(可能是有效值(都是伪值:
if (!foo) { // foo had better not be empty string or zero
然而,JavaScript为您提供了一个涉及松散等式的选项(有些人对此表示不满(,null
和undefined
彼此松散等效,但与任何其他伪值无关:
null == undefined //true
null == NaN // false
undefined == '' // false
完全。。。毫无意义,用一个双关语来说。
if()
自动将条件值转换为布尔值。
!!
也将其转换为布尔值。
!!
有时用于将某个值强制为boolean
。。
例如:
var hasElement == !!document.getElementById("zz");
相关文章:
- Python Javascript哈希库,以确保JSON对象在传输过程中不会损坏
- 在ES2015中,如何确保所有方法都等待对象初始化?使用ES7装饰器
- 使用 javascript 进行 OOP 编程:确保无论对象如何实例化,这都指向正确的事物
- jQuery - 扩展对象,同时确保数组成员的完整性
- 确保对象可以被垃圾回收
- Javascript:如何确保"这个“;在一个对象内总是相同的
- 使用bind来确保方法引用对象,但它不引用对象;似乎不起作用
- 在从Flash调用javascript对象之前,请确保该对象存在
- 什么'在处理多级对象时,确保JavaScript对象已设置且未定义的最佳实践
- 有没有一种正确的方法可以确保一次只有一个用户使用REST+HTTP对对象进行更改
- 如何确保变量是一个对象
- HTML5 Javascript:如何确保绘制的对象不能离开画布
- 有必要使用双感叹号(!!)来确保对象不是null吗
- 我怎样才能确保'this'引用对象文字中的对象文字
- Javascript:确保闭包中的对象被垃圾收集
- 如何确保承诺链返回一个对象
- 确保通过函数传递的对象属性等于某些值
- 如何确保两个独立的javascript对象的属性被链接
- 如何确保返回对象文本中的方法调用使用预期的“this”
- 确保在调用函数 - angularJS 之前定义了对象