在JavaScript中使用(!!!)操作符?
!!运算符显然很有用,因为它强制将非布尔值的内容检查为布尔值-即“真”条件在JavaScript中使用(!!!)操作符?,javascript,Javascript,!!运算符显然很有用,因为它强制将非布尔值的内容检查为布尔值-即“真”条件 但是假的呢?你需要使用 一个就足够了:) 一个就足够了:) 这是“真实”条件 不,这是任何价值的将转换其等效布尔值中的任何值 为什么??因为not运算符只返回相反的布尔值。所以 0 // is falsy !0 // -> true !!0 // -> false 'foo' // is truthy !'foo' // -> false !!'foo' // -> tr
但是假的呢?你需要使用 一个
代码>就足够了:)
一个代码>就足够了:)
这是“真实”条件
不,这是任何价值的<代码>代码>将转换其等效布尔值中的任何值
为什么??因为not运算符只返回相反的布尔值。所以
0 // is falsy
!0 // -> true
!!0 // -> false
'foo' // is truthy
!'foo' // -> false
!!'foo' // -> true
任何附加应用程序都将再次切换该值。因此
相当于代码>和代码>相当于代码>等等
var boolCheck = 0;
boolCheck //0
!boolCheck //true
!!boolCheck //false
!!!boolCheck //true - again
这是“真实”条件
不,这是任何价值的<代码>代码>将转换其等效布尔值中的任何值
为什么??因为not运算符只返回相反的布尔值。所以
0 // is falsy
!0 // -> true
!!0 // -> false
'foo' // is truthy
!'foo' // -> false
!!'foo' // -> true
任何附加应用程序都将再次切换该值。因此
相当于代码>和代码>相当于代码>等等
var boolCheck = 0;
boolCheck //0
!boolCheck //true
!!boolCheck //false
!!!boolCheck //true - again
这里也一样:
var boolCheck = 1;
boolCheck //1
!boolCheck //false
!!boolCheck //true
!!!boolCheck //false - again
没有理由使用这个(!!!),这是一个同义反复在以下情况下非常有用:
当有一些结果时,我们需要一个布尔值(!!5=>true)李>
我们需要用缩短false!1或正确-!0。
或者跳过包装器
这里也一样:
var boolCheck = 1;
boolCheck //1
!boolCheck //false
!!boolCheck //true
!!!boolCheck //false - again
没有理由使用这个(!!!),这是一个同义反复在以下情况下非常有用:
当有一些结果时,我们需要一个布尔值(!!5=>true)李>
我们需要用缩短false!1或正确-!0。
或者跳过包装器
代码>本身不是运算符;这只是使用JavaScript的逻辑NOT(!
)操作符的一种方式
要将x
转换为布尔值,!!x
之所以起作用,是因为当对布尔值求反两次时,得到的是原始布尔值,!x
在求反之前将x
转换为布尔值
同样,!!!x
将x
转换为布尔值并对其求反三次,这相当于只对其求反一次。所以你可以使用!x
而不是!!!x
代码>本身不是运算符;这只是使用JavaScript的逻辑NOT(!
)操作符的一种方式
要将x
转换为布尔值,!!x
之所以起作用,是因为当对布尔值求反两次时,得到的是原始布尔值,!x
在求反之前将x
转换为布尔值
同样,!!!x
将x
转换为布尔值并对其求反三次,这相当于只对其求反一次。所以你可以使用!x
而不是!!!这完美地回答了你的问题
!!!x可能是一个布尔转换的倒数!!x:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
“任何非空字符串的计算结果均为true”
所以!!!“假”;/==错误
这个问题不是开玩笑。例如:
function ok(value, message) {
if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
编辑:我认为他们这样做是出于代码可读性的原因,出于习惯,因为
编辑:我不知道为什么我5天前下载的Node.js版本仍然存在!!!价值而不是价值!GitHub中的值
编辑:。这完美地回答了您的问题
!!!x可能是一个布尔转换的倒数!!x:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
“任何非空字符串的计算结果均为true”
所以!!!“假”;/==错误
这个问题不是开玩笑。例如:
function ok(value, message) {
if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
编辑:我认为他们这样做是出于代码可读性的原因,出于习惯,因为
编辑:我不知道为什么我5天前下载的Node.js版本仍然存在!!!价值而不是价值!GitHub中的值
编辑:。!将值转换为反布尔值(如果为真,则变为假;如果为真,则变为真)!瓦尔===!!!val
用于任何val@Simon:我从未见过==
。假设你的意思是严格比较,那么布尔运算怎么会是比较的对立面呢?这个问题不是开玩笑吗?@GuilhermeSehn你应该澄清一下!值就足以进行布尔转换。!将值转换为反布尔值(如果为真,则变为假;如果为真,则变为真)!瓦尔===!!!val
用于任何val@Simon:我从未见过==
。假设你的意思是严格比较,那么布尔运算怎么会是比较的对立面呢?这个问题不是开玩笑吗?@GuilhermeSehn你应该澄清一下!值对于布尔转换就足够了。不,如果某个值返回为未定义的值就不足够了!!强制将未定义的转换为true。@安东帕格:你确定吗?一个
似乎很好,至少在我的浏览器中是这样。@antonpug好的,你发布的链接只表明我是对的!!在未定义时将永远不会返回true。仅有一个的将任何值转换为布尔值并对其应用NOT操作,第二!只需再应用一个。不,如果返回的内容未定义,则不适用!!强制将未定义的转换为true。@安东帕格:你确定吗?一个
似乎很好,至少在我的浏览器中是这样。@antonpug好的,你发布的链接只表明我是对的!!在未定义时将永远不会返回true。仅有一个的将任何值转换为布尔值并对其应用NOT操作,第二!我只想再申请一个。这个答案是完美的,非常清楚。这个答案是完美的,非常清楚。