详解JavaScript (!!) 中的双感叹号是干什么用的

目录
  • JavaScript (!!) 中的双感叹号是干什么用的?
  • 真与真
  • 那么为什么要双感叹号呢?

JavaScript (!!) 中的双感叹号是干什么用的?

如果您曾在某人的 JavaScript 代码中注意到双感叹号 (!!),您可能会好奇它的用途和作用。这很简单:这是一种将变量转换为布尔值(真或假)的捷径。让我解释。

 typeof JavaScript!= '静态'

JavaScript 不是静态语言,而是动态语言。这意味着变量可以引用或保存任何类型的值,此外,该类型可以随时更改。无论您喜欢静态语言还是动态语言,都由您决定。

但是,我们当然可以对 JavaScript 中的类型有所了解。以下是 JavaScript 中各种数据类型的快速列表:

  • 布尔值
  • 细绳
  • 数字
  • 目的

布尔数据类型是所有数据类型中最简单的,因为它是单个位值:0(假)或 1(真)。

真与真

我们可以将变量设置为布尔值,并在评估 if 语句时使用它。这是我们的简单示例。

 功能() {
 var thisIsTrue = true;
 如果(thisIsTrue){
 window.alert('当然是!');
 }
 }

执行上述函数时,我们将收到警报 那当然是! 因为变量 这是真实的 被设置为布尔值 真的 .

现在,让我们看看 JavaScript 如何评估非布尔值以将其转换为布尔值。

 功能() {
 无变量 = '';
 如果(什么都没有){
 window.alert('没什么');
 } 别的 {
 window.alert('嗯?');
 }
 }

执行上述函数时,我们将收到警报 嗯? 因为变量的值 没有什么 被评估为假。这就是通常所说的 真相 相对 谬误 .

JavaScript 认为以下值是假的:

  • 很多时候: “”
  • 0
  • 无效的
  • 不明确的

JavaScript 认为以下值为真:

  • 目的: {}
  • 种类: []
  • 非空字符串: “任何事物”
  • 非零数: 3.14
  • 日期: 新日期();

运行您的代码的 JavaScript 引擎将在必要时尝试将值转换(或强制)为布尔值,例如在 if 语句中求值时。

那么为什么要双感叹号呢?

在某些情况下,您可能希望将变量强制转换为显式布尔值。因为?嗯,第一个原因是大多数时候开发人员不使用类型安全的比较运算符。

类型安全的比较运算符是:

  • 严格相等: ===
  • 严格不相等: !==

使用类型安全的比较运算符时,您正在检查值是否相等(或不相等)以及类型是否相同。如果没有类型安全的比较运算符,您将允许 JavaScript 引擎根据真/假逻辑自由地强制您的变量为真或假。

要将 JavaScript 变量转换为布尔值,只需使用两个感叹号:

功能() {
 var name = '布赖恩'; //警报'字符串'
 window.alert(类型名称); //转换为布尔值
 var bool = !!name; //警报'布尔'
 window.alert(bool 类型);
 }

在上面的示例代码中,我们正在转换字符串 “布赖恩” 为了一个值 布尔值 .所以第二个警报将表明该变量现在是 布尔值 勇气。

由 Brian F Love 的博客免费翻译,您可以在此处访问原始文章: https://brianflove.com/2014-09-02/whats-the-double-exclamation-mark-for-in-javascript/

到此这篇关于JavaScript (!!) 中的双感叹号是干什么用的?的文章就介绍到这了,更多相关JavaScript (!!) 双感叹号内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 探讨js中的双感叹号判断

    今天看qunit源代码,发现一段很奇怪的代码,虽然能领会他的意思,但是不明白双感叹号起到的作用. 复制代码 代码如下: function id( name ) {    return !!( typeof document !== "undefined" && document && document.getElementById ) &&        document.getElementById( name );} 然后去网上查了些

  • 详解JavaScript (!!) 中的双感叹号是干什么用的

    目录 JavaScript (!!) 中的双感叹号是干什么用的? 真与真 那么为什么要双感叹号呢? JavaScript (!!) 中的双感叹号是干什么用的? 如果您曾在某人的 JavaScript 代码中注意到双感叹号 (!!),您可能会好奇它的用途和作用.这很简单:这是一种将变量转换为布尔值(真或假)的捷径.让我解释. typeof JavaScript!= '静态' JavaScript 不是静态语言,而是动态语言.这意味着变量可以引用或保存任何类型的值,此外,该类型可以随时更改.无论您喜

  • 一文详解JavaScript中prototype的使用

    目录 prototype初步认识 函数有prototype属性,函数创建的对象没有 获得当前对象的属性 父和子的扩展 子的proto和prototype的区别 扩展得到的东西到底从哪来的 prototype初步认识 在学习JavaScript中,遇到了prototype,经过一番了解,知道它是可以进行动态扩展的 function Func(){}; var func1 = new Func; console.log(func1.var1) //undefined Func.prototype.v

  • 详解JavaScript中的4种类型识别方法

    具体内容如下: 1.typeof [输出]首字母小写的字符串形式 [功能] [a]可以识别标准类型(将Null识别为object) [b]不能识别具体的对象类型(Function除外) [实例] console.log(typeof "jerry");//"string" console.log(typeof 12);//"number" console.log(typeof true);//"boolean" console

  • 详解JavaScript 中getElementsByName在IE中的注意事项

    详解JavaScript 中getElementsByName在IE中的注意事项 前言: 在IE5-9中是没有实现js的 getElementsByClassName()方法,但是实现了getElementsByName()方法,但是需要注意的是这个方法在IE5-9中也返回id属性匹配的指定元素,为了兼容,应该小心谨慎使用,不要将同样的字符串同时用作了名字和ID. 测试程序如下: <div id="log"> <div id="innerLog"&

  • 详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于'类的',而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能

  • 详解Javascript 中的 class、构造函数、工厂函数

    到了ES6时代,我们创建对象的手段又增加了,在不同的场景下我们可以选择不同的方法来建立.现在就主要有三种方法来构建对象,class关键字,构造函数,工厂函数.他们都是创建对象的手段,但是却又有不同的地方,平时开发时,也需要针对这不同来选择. 首先我们来看一下,这三种方法是怎样的 // class 关键字,ES6新特性 class ClassCar { drive () { console.log('Vroom!'); } } const car1 = new ClassCar(); consol

  • 详解JavaScript中的Object.is()与"==="运算符总结

    三重相等运算符 === 严格检查2个值是否相同: 1 === 1; // => true 1 === '1'; // => false 1 === true; // => false 但是,ES2015规范引入了 Object.is(),其行为与严格的相等运算符几乎相同: Object.is(1, 1); // => true Object.is(1, '1'); // => false Object.is(1, true); // => false 主要问题是:什么时

  • 详解JavaScript中的链式调用

    链模式 链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧. 描述 链式调用在JavaScript语言中很常见,如jQuery.Promise等,都是使用的链式调用,当我们在调用同一对象多次其属性或方法的时候,我们需要多次书写对象进行.或()操作,链式调用是一种简化此过程的一种编码方式,使代码简洁.易读. 链式调用通常有以下几种实现方式,但是本质上相似,都是通过返回对象供之后进行调用. this的作用域链,jQuery的实现方式,通常链式调用

  • 详解JavaScript中的this指向问题

    题记 JS中的this指向一直是个让初学者头疼的问题.今天,我们就一起来瞅瞅this倒地是咋回事,详细说说this指向原则,从此不再为了this指向操碎了心. 开篇 首先我们都知道this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它所在函

  • 详解JavaScript中new操作符的解析和实现

    前言 new 运算符是我们在用构造函数创建实例的时候使用的,本文来说一下 new 运算符的执行过程和如何自己实现一个类似 new 运算符的函数. new 运算符的运行过程 new 运算符的主要目的就是为我们创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例(比如箭头函数就没有构造函数,所以是不能 new 的).new 操作符的执行大概有以下几个步骤: 创建一个新的空对象 把新对象的 __proto__ 链接到构造函数的 prototype 对象(每一个用户定义函数都有一个 proto

随机推荐