Pro*_*eur 193 javascript html5
我绝不是Javascript的专家,但我一直在阅读Mark Pilgrim的"潜入HTML5"网页,他提到了一些我想要更好理解的内容.
他说:
最后,使用双负技巧将结果强制为布尔值(true或false).
function supports_canvas() {
return !!document.createElement('canvas').getContext;
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够更好地解释这一点我会很感激!
zwo*_*wol 29
当放置在期望布尔值的上下文中时,Javascript对于被认为是"真"和"假"的内容有一组令人困惑的规则.但是逻辑 - 非运算符!总是产生一个合适的布尔值(其中一个常量true和false).通过链接其中两个,这个成语!!expression产生一个与原始表达式具有相同真实性的适当布尔值.
你为什么要打扰?因为它使您显示的功能更加可预测.如果它没有双重否定,它可能会返回undefined,一个Function对象或一个与Function对象完全不同的东西.如果这个函数的调用者对返回值做了一些奇怪的事情,那么整个代码可能会出错(这里的"怪异"意味着"除了强制执行布尔上下文的操作之外的任何东西").双阴性成语阻止了这一点.
Str*_*ior 14
在javascript中,如果给定值为true,1,not null等,则使用"bang"运算符(!)将返回true.如果值为undefined,null,0或空字符串,则返回false.
因此,bang运算符将始终返回一个布尔值,但它将代表您开始时的相反值.如果您获取该操作的结果并再次"敲击"它,您可以再次反转它,但仍然以布尔值结束(而不是未定义,null等).
使用bang两次将获取一个可能未定义,null等的值,并使其变得简单false.它需要一个可能是1,"真实"等的值,并使其变得简单true.
代码可以写成:
var context = document.createElement('canvas').getContext;
var contextDoesNotExist = !context;
var contextExists = !contextDoesNotExist;
return contextExists;
Run Code Online (Sandbox Code Playgroud)
fms*_*msf 11
使用!!变量可以保证对布尔值进行类型转换.
举个简单的例子:
"" == false (is true)
"" === false (is false)
!!"" == false (is true)
!!"" === false (is true)
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在执行以下操作,则使用它是没有意义的:
var a = ""; // or a = null; or a = undefined ...
if(!!a){
...
Run Code Online (Sandbox Code Playgroud)
if将它转换为boolean,因此不需要进行隐式双负转换.
第一个!将变量强制转换为布尔类型并将其反转.第二个!反转它(给你原始的(正确的)布尔值,无论你正在检查什么).
为清楚起见,您最好使用
return Boolean(....);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33642 次 |
| 最近记录: |