`
Rainbow702
  • 浏览: 1076978 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

javascript中两个感叹号的作用

阅读更多

最近在在看Javascript代码时,会经常看到代码中使用双感叹的用法,如

 

var a = !!result.flag;

 开始的时候,不怎么明白为什么一定要这么做?后来想想,应该是在下文中要对a进行判断。那么,有人可能会问,即使用不用又感叹号,也能正常的判断啊。的确如此,但我想,经过双感叹号之后,a的值就变成了一个boolean值了,这样会让判断语句看上去更直观吧。

 

 

因为大家都知道,js是一个弱类型语言,在JS中使用如下语句判断时:

 

if(!a) {
    alert("a ia not true");
}

 当a的值为null/undefined/0/NaN/""(空字符串)时,上面的if条件都是成立的,从而都会弹出“a ia not true”;但是从语义来上看的话,可能并不能么好理解。明明a是null或者undefined,可为什么弹出的消息却是“a ia not true”。为了避免这种理解上的差异,就可以使用双感叹号了。

 

也就是说,双感叹号其实是简单的,没什么玄乎的,下面的代码可以说明这一点:

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script>
	var a = {a:112};
	var b = a.b;
	var c = !a.b;
	var d = !!a.b;
	
	var e = a.a;
	var f = !a.a;
	var g = !!a.a;

</script>
</head>
<body>
</body>
</html>

 debug截图(注意看右边的 watch expressions哦):



 

 

 

  • 大小: 55.4 KB
分享到:
评论

相关推荐

    JavaScript中两个感叹号的作用说明

    两个感叹号的组合实际上是两次逻辑非操作的连续应用。第一次!操作会将非布尔值转换为布尔值,第二次!操作则会反转这个布尔值,从而再次得到一个布尔值。这种机制特别有用,因为它可以确保结果始终是true或false。 ...

    javascript中2个感叹号的用法实例详解

    而两个感叹号(!!)则是连续两次应用这个逻辑非操作,从而实现对非布尔值的强制类型转换。 1. **应用场景:判断对象是否存在** 在JavaScript中,当尝试访问一个未定义的对象时,通常会得到`undefined`或`null`。...

    探讨js中的双感叹号判断

    但是,当你连续使用两个感叹号(!!),它的作用就变成了“强制类型转换”——将任何类型的值转化为布尔值。这个过程遵循以下规则: 1. 如果值是 `null` 或 `undefined`,它们会被转换为 `false`。 2. 如果值是布尔...

    75个JavaScript面试题集锦

    15. **比较相似对象**:由于JavaScript的引用比较,即使两个对象看起来相同,它们也不会被认为是相等的,除非它们是同一个对象的引用。 16. **!! 运算符**:双感叹号用于将任何值转换为布尔值,通常用于非零数字、...

    JavaScript中双叹号!!作用示例介绍

    例如,对于一个未定义的变量a,通过双叹号操作可以得到一个明确的布尔值false,而不是在使用单个感叹号时得到的true。这种转换在进行条件判断时尤其有用,因为它提供了一种快速检查变量是否被赋予了有效值的方法。 ...

    30 个 JavaScript 妙语.docx

    4. **数字到布尔值的转换**:双感叹号`!!`用于将数字转换为布尔值,0 转换为 `false`,非零值转换为 `true`。这对于条件判断非常实用。 5. **获取数组中的唯一值**:结合`Set`和扩展运算符`...`,可以快速去除数组...

    浅谈JavaScript中的“!!”作用

    这个操作符组合通常由两个感叹号"!"组成,其中每个"!"首先对给定的值进行逻辑非操作,即将其布尔值取反;接着,第二个"!"再将结果取反,从而得到一个布尔值。这种用法对于确保变量在布尔上下文中正确表现其真伪性...

    Snarkdown是一个用JavaScript编写的极简的Markdown解析器

    1. **粗体** 和 _斜体_:通过在文字前后分别添加两个星号或下划线来实现。 2. 标题:使用#符号来定义不同级别的标题,最多支持六级标题。 3. 无序列表:通过在每一项前面插入一个星号、加号或减号来创建。 4. 有序...

    ModuleExclamation:此模块将返回一个感叹号 (!)

    在JavaScript编程语言中,"ModuleExclamation"是一个小型但有趣的模块,它的主要功能是返回一个感叹号(!)。这个模块的使用可能看似简单,但在实际的编程场景中,它能体现模块化编程的优势,帮助开发者更好地组织代码...

    javascript技巧(珍藏版)

    - 通过两个感叹号`!!`来实现,非零数值和非空字符串都会被转换为`true`,如 `var bool = !!myVar;` 4. **将值转换为数组**: - 可以通过简单的数组字面量来实现,如 `var array = [myVar];` 此外,在使用`new ...

    JavaScript中双叹号(!!)作用示例介绍

    当我们连续使用两个感叹号时,实际上是进行了一次逻辑非操作,然后立即再次进行了一次逻辑非操作。这相当于进行了两次逻辑非,第一次得到一个非原值的布尔值,第二次又将这个非原值的布尔值取反,最终得到的还是原始...

    JavaScript中双符号的运算详解

    本文将深入探讨两种常见的双符号运算:双波浪号(`~~`)和双感叹号(`!!`),并提供相关的示例代码以帮助理解它们的用法。 ### 一、双波浪号(`~~`) 双波浪号(`~~`)运算符是一种快速的整数取整方法,通常用于...

    JavaScript最新2021年面试题,高级面试题及附答案解析.md

    - **隐式类型转换**:当两个操作数的数据类型不同时,JavaScript 会在执行运算前自动进行类型转换。例如: - `x + ""` 相当于 `String(x)`。 - `+x` 相当于 `Number(x)`。 - `x - 0` 同样相当于 `Number(x)`。 -...

    Javascript权威指南笔记.docx

    JavaScript,简称JS,是...`双感叹号或`Boolean()`,假性值会被转换为false,其他值转换为true。 以上是JavaScript基础部分的核心知识点,涵盖了从基本语法到数据类型的深入理解,对于学习和掌握JavaScript至关重要。

    深入浅析JavaScript函数前面的加号和叹号

    然而,当加号(+)或类似的一元操作符(如感叹号、位非操作符~)放在函数前面时,它告诉解析器这是一个表达式,而非声明。接着,后面的`()`立即执行这个函数表达式,这就是所谓的立即执行函数(IIFE,Immediately ...

    JQ 删除字符串最后一个或几个字符的方法.rar

    这两个方法都能截取字符串的一部分。例如: ```javascript var str = "Hello, World!"; var newStr = str.substring(0, str.length - 1); // 或者 var newStr = str.slice(0, -1); console.log(newStr); // ...

    javascript去除字符串中所有标点符号和提取纯文本的正则

    字符类中包含了空格(` `)、波浪线(`~`)、反引号(`` ` ``)、感叹号(`!`)、@、#、$、%、^、&、*、(、)、-、_、+、=、|、\、[、]、{、}、;、:、"、'、&lt;、.、&gt;、/、?。`g`标志表示全局匹配,确保替换掉字符串中...

Global site tag (gtag.js) - Google Analytics