你为什么要用!!在这种情况下的表达式中?AngularJS API.
Why would you use !! in an expression in this case? angularjs api
最近 - 学习和使用 Angularjs API。查看了angular.isElement((的源代码。我从根本上理解"!!"在使用表达式时对表达式的返回值的作用,但不明白为什么要使用它 - 它不是多余的吗?搜索!!信息不多。链接到 api 页面。
function isElement(node) {
return !!(node &&
(node.nodeName // we are a direct element
|| (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
}
更新:关于被标记为重复项 - 谢谢。 奇怪的是我没有在原始搜索中看到这个问题。
虽然许多很长的答案 - 阅读它们 - 他们并没有真正回答我困惑的地方。在这种情况下不是多余的吗? 如果没有!.,它不会恢复真实吗 感谢
!!
用于将"真"或"假"值转换为true
或false
,等价于Boolean()
。例如
!!0 // false
!!1 // true
function Obj() {}
o = new Obj()
!!o // true
!!'' // false
!!'hi' // true
(1 && 3 && 4) // 4
!!(1 && 3 && 4) // true
!!x
可以大声读作"不是x"。第一个!
将真值转换为false
,将假值转换为true
。然后第二个!
反转,使真值变为true
,假值变为false
。
至于为什么人们使用它而不是Boolean
,这似乎只是一个惯例。它简明扼要,大多数程序员都很容易理解,并且可能与人们在 C 或 C++ 中做事的方式有一些相似之处。它不是特别快。
编辑。您想知道为什么在这种特殊情况下它不是多余的。我们可能不知道什么类型的对象作为node
传递给函数。 JavaScript 中的&&
从左到右工作,如果所有操作数都是真数,则返回最右边的操作数,而不是真或假。尝试在没有!!
的情况下重新定义isElement
。我们收到以下响应:
isElement('hi') // undefined
isElement(0) // 0
isElement(3) // undefined
isElement({nodeName: 'something'}) // 'something'
isElement({prop: 100, attr: this, find: Infinity}) // Infinity
事实上,这些结果在大多数时候都会得到很好的处理——在任何if
语句中,真值('某物',无穷大(将被视为真,而假值(未定义,0(将被视为假值。但是,API 的用户仍然希望它只返回 true
或false
,如果允许它返回任何这些内容,偶尔会出现意外行为。
!!var === Boolean(var)
. 这并不总是正确的,但对于现代口译员来说却是如此。 在旧的解释器中,Boolean(var)
总是返回true
,因为它是一个对象,所以人们使用!!
来获得等效值。
。当然它更短
它将值转换为布尔值。 !!
本身不是运算符。 它只是否定运算符!
两次。
&&
运算符并不总是返回布尔值。它实际上返回false
或第二个值。
这就是为什么!!
被用来强制它是一个布尔值,因为APIA显然应该返回一个。
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- java.net和javascript之间正则表达式的差异
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- ng init中的表达式无法使用ng repeat
- 正则表达式在字符串中找到base64
- 我的AngularJS表达式没有'不起作用
- 将cron表达式转换为人类可读字符串的JavaScript API
- 用于 API 子域的正则表达式
- 你为什么要用!!在这种情况下的表达式中?AngularJS API.
- 在带有谷歌地图嵌入api的ng-src中使用angular表达式
- 用于Google Calendar API日期输出的正则表达式
- 谷歌地图API v3-类型错误:表达式的结果'google.maps.LatLng'[defined]不
- API 调用的 URL 正则表达式
- 如何在保持相同API的同时将此JavaScript包装在立即调用的函数表达式(IIFE)中?
- 用谓词表达式作为参数获取api请求