在javascript中有时会看到有两个!!的用法。我很少用到(本人在js方面是菜鸟),但是在一些开源框架(如jquery)中经常看到。所以参考网上的相关资料总结了一下它的用法。
var foo; alert(!foo);//undifined情况下,一个感叹号返回的是true; alert(!goo);//null情况下,一个感叹号返回的也是true; var o={flag:true}; var test=!!o.flag;//等效于var test=o.flag||false; alert(test);
这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/""等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。
grep: function( elems, callback, inv ) { var ret = [], retVal; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }
这是jquery中一个比较经典的例子,
在使用grep函数的时候,如果给出了第三个参数且非null/undefined/0""/等值,则inv为 true,否则为false。这样做的目的就是保证inv和retVal的值都只能在true/false中取,而非其它值,为后续判断提供便利。
相关推荐
两个感叹号的组合实际上是两次逻辑非操作的连续应用。第一次!操作会将非布尔值转换为布尔值,第二次!操作则会反转这个布尔值,从而再次得到一个布尔值。这种机制特别有用,因为它可以确保结果始终是true或false。 ...
而两个感叹号(!!)则是连续两次应用这个逻辑非操作,从而实现对非布尔值的强制类型转换。 1. **应用场景:判断对象是否存在** 在JavaScript中,当尝试访问一个未定义的对象时,通常会得到`undefined`或`null`。...
但是,当你连续使用两个感叹号(!!),它的作用就变成了“强制类型转换”——将任何类型的值转化为布尔值。这个过程遵循以下规则: 1. 如果值是 `null` 或 `undefined`,它们会被转换为 `false`。 2. 如果值是布尔...
在本文中,我们将深入探讨`split()`函数的使用方法,包括其基本语法、参数、常见用例以及与之相关的其他字符串操作。 ### `split()`函数的基本语法 `string.split(separator[, limit])` - `separator`: 必需参数...
在JavaScript编程中,匿名函数和匿名自执行函数是两个非常重要的概念和工具,它们在实现特定功能和组织代码结构中扮演着关键的角色。接下来,我们将详细分析这两者的概念、功能、应用场景及相关使用技巧。 首先,...
在自然语言处理(NLP)...总的来说,这个项目旨在构建一个高效的中英文断句工具,通过结合规则和机器学习方法,能够准确地在混合文本中识别并分离出独立的句子,这对于后续的文本分析和处理任务具有重要的支持作用。
15. **比较相似对象**:由于JavaScript的引用比较,即使两个对象看起来相同,它们也不会被认为是相等的,除非它们是同一个对象的引用。 16. **!! 运算符**:双感叹号用于将任何值转换为布尔值,通常用于非零数字、...
下面将详细说明这两个函数的功能和使用方法,并通过实例来具体分析其用法。 首先,`setTimeout()` 函数的基本用法如下: ```javascript var timeoutID = setTimeout(func, delay[, param1, param2, ...]); ``` 或者...
在这个示例中,我们首先创建了两个长度为26的Buffer实例buf1和buf2,并分别用ASCII字符'a'到'z'和感叹号'!'填充。接着,我们使用buf1.copy方法将buf1中索引从16到19的数据复制到buf2中从索引8开始的位置。最终,我们...
然而,当加号(+)或类似的一元操作符(如感叹号、位非操作符~)放在函数前面时,它告诉解析器这是一个表达式,而非声明。接着,后面的`()`立即执行这个函数表达式,这就是所谓的立即执行函数(IIFE,Immediately ...
在JavaScript编程语言中,逻辑非操作符(!)和双逻辑非操作符(!!)是两个非常有用的工具,它们在处理逻辑判断和类型转换时有着不同的应用和区别。...熟练使用这两个操作符可以帮助我们编写更简洁高效的代码。
18. **使用`map()`和`filter()`进行数据转换和过滤**:这两个数组方法可以联合使用,对数组进行操作,例如筛选满足条件的元素并转换它们。 19. **使用`reduce()`进行数组求和**:`reduce()`可以用来对数组的所有...
- 通过两个感叹号`!!`来实现,非零数值和非空字符串都会被转换为`true`,如 `var bool = !!myVar;` 4. **将值转换为数组**: - 可以通过简单的数组字面量来实现,如 `var array = [myVar];` 此外,在使用`new ...
本文将深入探讨两种常见的双符号运算:双波浪号(`~~`)和双感叹号(`!!`),并提供相关的示例代码以帮助理解它们的用法。 ### 一、双波浪号(`~~`) 双波浪号(`~~`)运算符是一种快速的整数取整方法,通常用于...
操作符的使用方法非常简单,它是在变量或表达式前加上两个感叹号。第一个感叹号会将变量或表达式转换为它的逻辑非(即falsy值变为truthy,truthy值变为falsy),而第二个感叹号则再次将结果逻辑非,从而得到一个明确...
- **隐式类型转换**:当两个操作数的数据类型不同时,JavaScript 会在执行运算前自动进行类型转换。例如: - `x + ""` 相当于 `String(x)`。 - `+x` 相当于 `Number(x)`。 - `x - 0` 同样相当于 `Number(x)`。 -...
然而,由于jQuery对象可以无缝地与JavaScript原生对象转换,因此我们可以在jQuery对象上使用JavaScript的字符串方法。 1. 删除字符串最后一个字符: 要删除字符串的最后一个字符,我们可以使用JavaScript的`...
为了方便读者进行正则表达式的测试与生成,文档中推荐了两个在线工具: 1. **正则表达式在线测试工具**:允许用户输入正则表达式和待测试字符串,然后执行匹配,验证正则表达式的正确性和效果。 2. **正则表达式...