见过!! JavaScript 代码中并想知道发生了什么?让我们简单地分解一下。
有什么作用!!做?
双感叹号 (!!) 是将任何值转换为布尔值(true 或 false)的快速方法。就这么简单!
把它想象成问 javascript:“嘿,这个值是否存在并且有意义吗?”
- 如果是的话,你就明白了
- 如果不是,你就错了
查看实际效果
让我们看一些简单的例子:
// these become true !!42 // true (any number except 0) !!"hello" // true (any non-empty string) !!{} // true (any object) !![] // true (any array) // these become false !!0 // false !!"" // false (empty string) !!null // false !!undefined // false
现实世界的例子
1. 检查用户是否提供了姓名
function validatename(name) { if (!name) { // same as if (!!name === false) return "please enter your name"; } return `thanks, ${name}!`; } validatename("") // "please enter your name" validatename("sarah") // "thanks, sarah!"
2. 检查api响应是否有数据
function handleresponse(data) { const hasdata = !!data?.items?.length; if (hasdata) { return "found some results!"; } return "no results found"; } handleresponse({items: []}) // "no results found" handleresponse({items: [1,2,3]}) // "found some results!"
你什么时候应该使用!!?
!!在以下情况下特别有用:
- 您需要一个真正的布尔值,而不是“真”或“假”值
- 您正在检查某个值是否存在并且有意义
- 你想让代码的意图非常清晰
哪些价值观会变成错误的?
这些都是使用 !! 时变为 false 的值:
- 0
- “”(空字符串)
- 空
- 未定义
- nan
- 假
其他一切都成真!
专业提示
1. if 语句快捷方式
在 if 语句中,javascript 会自动将值转换为布尔值,因此:
if (!!username) { // do something }
等同于:
if (username) { // do something }
2. 使用 Boolean() 代替
一些开发人员更喜欢使用 boolean(),因为它更明显发生的事情:
Boolean("hello") // true Boolean("") // false !!("hello") // true !!("") // false
两者的工作方式完全相同 – 使用对您更有意义的那个!
快速回顾
- !!将值转换为 true/false
- 这对于检查值是否存在非常有用
- 当你特别需要布尔结果时使用它
- 在 if 语句中,通常不需要它
记住:最好的代码是您的团队可以轻松理解的代码。不管你用不!!或 boolean(),只要保持一致即可!