我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?
我看到这件事的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
当前回答
只是为了检查是否存在
if(!!isComplianceOnHold){
//write code here is not undefined
//if isComplianceOnHold is undefined or null will not enter in net is false
// if isComplianceOnHold is not null or even boolean net result is true and enter inside if block
}
任何值未定义或为null的对象,包括值为false的布尔对象,在传递给条件语句时其计算结果为true
其他回答
!! 类似于使用布尔构造函数,或者可以说更像布尔函数。
console.log(布尔值(null));//优先于布尔对象console.log(new Boolean(null).valueOf());//不建议用于转换非布尔值console.log(!!null);//一种省略调用布尔函数的方法,但本质上也是这样。//您之前看到的上下文(您的示例)var垂直;函数示例(垂直){this.vertical=垂直!==未定义!!垂直:此垂直;//让我们来细分一下:如果vertical没有被严格定义,则返回vertical的布尔值并将其设置为this.vertical。如果没有,则不要为this.vertical设置值(只需忽略它并将其重新设置为以前的值;在这种情况下,什么都没有)。返回this.vertical;}console.log(“\n---------------------”)//垂直当前未定义console.log(新示例(垂直)垂直);//这是虚假的还是真实的价值。垂直的console.log(!!new Example(vertical).s垂直);//此垂直强制值垂直=12.5;//将垂直设置为12.5,这是一个真实的值。console.log(新示例(垂直)垂直);//这是假的或真的价值。不管怎样,这都是真的console.log(!!new Example(vertical).s垂直);//此垂直强制值垂直=-0;//将vertical设置为-0,这是一个错误的值。console.log(新示例(垂直)垂直);//这个值是假的还是真的。不管怎样,这个值都是假的console.log(!!new Example(vertical).s垂直);//此垂直强制值
JavaScript中的false值强制为false,truthy值强制为true。Falsy和truthy值也可以在if语句中使用,并基本上“映射”到它们对应的布尔值。然而,您可能不会发现自己必须经常使用正确的布尔值,因为它们在输出(返回值)上大多不同。
虽然这可能看起来类似于选角,但实际上这可能只是一个巧合,并不是为布尔选角而“建造”或故意制造的。所以我们不要这么说。
为什么和如何工作
简而言之,它看起来像这样:!(!null)。然而,null是假的,所以!null将为真。然后true将为false,并且它将基本上反转回以前的状态,除了这次是一个正确的布尔值(或者甚至相反,使用真值,如{}或1)。
回到你的例子
总的来说,您看到的上下文只是根据是否定义了垂直来调整这一点;它将被设置为垂直的布尔值,否则它不会改变。换句话说,如果定义了垂直;this.vertical将设置为它的布尔值,否则,它将保持不变。我想这本身就是一个你会如何使用的例子!!,以及它的作用。
垂直I/O示例
运行此示例并在输入中摆弄垂直值。查看结果强制执行的操作,以便您能够完全理解上下文的代码。在输入中,输入任何有效的JavaScript值。
如果要测试字符串,请记住包含报价。不要太在意CSS和HTML代码,只需运行此代码段并使用它。然而,您可能需要查看与DOM无关的JavaScript代码(使用Example构造函数和垂直变量)。
var vertical=document.getElementById(“vertical”);var p=document.getElementById(“结果”);函数示例(垂直){this.vertical=垂直!==未定义!!垂直:此垂直;返回this.vertical;}document.getElementById(“run”).onclick=函数(){p.innerHTML=!!(新示例(eval(vertical.value)).svertical);}输入{文本对齐:居中;宽度:5米;}按钮{边距:15.5px;宽度:14em;高度:3.4em;颜色:蓝色;}变量{颜色:紫色;}p型{边距:15px;}span注释{颜色:棕色;}<!--垂直I/O示例--><h4>垂直示例</h4><code id=“code”><var class=“var”>var</var>vertical=<input-type=“text”id=“vertical”maxlength=“9”/><span class=“comment”>//输入任何有效的JavaScript值</span></code><br/><button id=“run”>运行</button><p id=“result”></p>
你可以考虑!!以这种方式:
当第一次!应用时,变量变为布尔值,但值相反然后,第二个!只是恢复正义,并将价值恢复到原来的同等价值
!! 只是两次NOT运算符。净效果就是转换任何东西以确保布尔数据类型。例如
!!undefined为false!!0为假!!null为false!!anyobject为true!!真是真!!false是false!0为真!1为假!!'' 是假的
它模拟Boolean()转换函数的行为。无论给定什么操作数,第一个NOT都返回布尔值。第二个NOT否定该布尔值,从而给出变量的真正布尔值。最终结果与对值使用Boolean()函数相同。
简单地说!!只返回一个布尔值,如果对象不是null或undefined,则返回true,否则返回false。
你可以这么说!!object等于if(object)返回true,否则返回false。
就这么简单!