我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
当前回答
简单地说!!只返回一个布尔值,如果对象不是null或undefined,则返回true,否则返回false。
你可以这么说!!object等于if(object)返回true,否则返回false。
就这么简单!
其他回答
这是一次双重手术。第一个!将值转换为布尔值并反转其逻辑值。第二个!反转逻辑值。
我认为值得一提的是,与逻辑“与/或”组合的条件不会返回布尔值,而是在&&的情况下返回最后一次成功或第一次失败,在条件链的||的情况下,返回第一次成功或最后一次失败。
res = (1 && 2); // res is 2
res = (true && alert) // res is function alert()
res = ('foo' || alert) // res is 'foo'
为了将条件转换为真正的布尔文字,我们可以使用双重否定:
res = !!(1 && 2); // res is true
res = !!(true && alert) // res is true
res = !!('foo' || alert) // res is true
我怀疑这是C++遗留下来的东西,在那里人们会重写!运算符,但不是布尔运算符。
因此,在这种情况下,要获得否定(或肯定)答案,首先需要使用!运算符来获取布尔值,但如果您想检查正数,则可以使用!!。
const foo=“bar”;console.log(!!foo);//布尔值:真
! 对值求反(反转),并始终返回/生成布尔值。所以!”bar'将产生false(因为'bar'是truthy=>否定+布尔值=false)。附加的!运算符,该值再次被求反,因此false变为true。
!!x是布尔(x)的简写。
第一次爆炸迫使JavaScript引擎运行Boolean(x),但它也有反转值的副作用。所以第二次爆炸消除了副作用。