在 if 语句中使用 Not Not 的任何目的
Any purpose in using Not Not in if statement
我看过用
写的JS代码
if(!!a){
//something here
console.log('something');
}
我不明白与以下相比,这样做的偏好是什么:
if(a){
//something else here
console.log('something else here');
}
用JS在表达式中输入!!
有什么收获吗?
Everything in JavaScript has an inherent Boolean value, generally
known as either truthy or falsy.
The following values are always falsy:
- false
- 0
- ""
- null
- undefined
- NaN
All other values are truthy, including "0" (zero in quotes), "false"
(false in quotes), empty functions, empty arrays, and empty objects.
对于你的情况,我认为它没有用,因为 if
已经使用了条件的 truthy/falsy 值:
if (0) {
// this will never be executed
}
!!
可以这样使用:
return !!myObject.length; // returns true if myObject.length > 0, false otherwise
if
语句检查传递给它的表达式的真实性。 !!
将真实性强制转换为布尔值。因此做:
if (!!a) {}
完全相同:
if (a) {}
使用 !! 没有任何好处!在这种情况下
这有强烈的货物崇拜编程或受另一种语言影响的味道。
需要理解的一些示例:
var el = document.getElementById('el');
var log = function(val){
// el.innerHTLM+='<div><pre>' + JSON.stringify(val , null , ' ') +'<\pre></div>';
el.innerHTML+='<div><pre>' + val +'<\pre></div>';
};
var a = 'Helo';
log('a = ' + a);
log('! a = ' + ! a);
log(' !! a = ' + !!a );
log('---');
log('true =' + true);
log('!true =' + !true);
log('!!true =' + !!true);
log('---');
log('false =' + false);
log('!false =' + !false);
log('!!false =' + !!false);
log('---');
log('null =' + null);
log('!null =' + !null);
log('!!null =' + !!null);
log('---')
log('undefined =' + undefined);
log('!undefined =' + !undefined);
log('!!undefined =' + !!undefined);
log('0 =' + 0);
log('!0 =' + !0);
log('!!0 =' + !!0);
log('---');
log('1 =' + 1);
log('!1 =' + !1);
log('!!1 =' + !!1);
log('---');
log('[] =' + []);
log('![] =' + ![]);
log('!![] =' + !![]);
log('---');
log('{} =' + {});
log('!{} =' + !{});
log('!!{} =' + !!{});
<div id='el'>Use case:</div>
我看过用
写的JS代码if(!!a){
//something here
console.log('something');
}
我不明白与以下相比,这样做的偏好是什么:
if(a){
//something else here
console.log('something else here');
}
用JS在表达式中输入!!
有什么收获吗?
Everything in JavaScript has an inherent Boolean value, generally known as either truthy or falsy.
The following values are always falsy:
- false
- 0
- ""
- null
- undefined
- NaN
All other values are truthy, including "0" (zero in quotes), "false" (false in quotes), empty functions, empty arrays, and empty objects.
对于你的情况,我认为它没有用,因为 if
已经使用了条件的 truthy/falsy 值:
if (0) {
// this will never be executed
}
!!
可以这样使用:
return !!myObject.length; // returns true if myObject.length > 0, false otherwise
if
语句检查传递给它的表达式的真实性。 !!
将真实性强制转换为布尔值。因此做:
if (!!a) {}
完全相同:
if (a) {}
使用 !! 没有任何好处!在这种情况下
这有强烈的货物崇拜编程或受另一种语言影响的味道。
需要理解的一些示例:
var el = document.getElementById('el');
var log = function(val){
// el.innerHTLM+='<div><pre>' + JSON.stringify(val , null , ' ') +'<\pre></div>';
el.innerHTML+='<div><pre>' + val +'<\pre></div>';
};
var a = 'Helo';
log('a = ' + a);
log('! a = ' + ! a);
log(' !! a = ' + !!a );
log('---');
log('true =' + true);
log('!true =' + !true);
log('!!true =' + !!true);
log('---');
log('false =' + false);
log('!false =' + !false);
log('!!false =' + !!false);
log('---');
log('null =' + null);
log('!null =' + !null);
log('!!null =' + !!null);
log('---')
log('undefined =' + undefined);
log('!undefined =' + !undefined);
log('!!undefined =' + !!undefined);
log('0 =' + 0);
log('!0 =' + !0);
log('!!0 =' + !!0);
log('---');
log('1 =' + 1);
log('!1 =' + !1);
log('!!1 =' + !!1);
log('---');
log('[] =' + []);
log('![] =' + ![]);
log('!![] =' + !![]);
log('---');
log('{} =' + {});
log('!{} =' + !{});
log('!!{} =' + !!{});
<div id='el'>Use case:</div>