JavaScript中会经常遇到一个操作符:!

这是一个布尔操作符,用于将操作的值强制转换为布尔值并取反。常用场景如下:

//条件判断中使用
var a;
var b=null; if(!a){
console.log("a是假的");
} if(!b){
console.log("b是假的");
} //操作布尔值
var c = false;
var d = !c;//d === true; //IIFE(自执行函数、立即执行函数:Immediately-Invoked Function Expression)
!function(){
console.log("IIFE");
}(); //转换值类型
var e=100;
var f='pelli';
var g='';
var h=0;
console.log(!!e);//true;
console.log(!!f);//true;
console.log(!!g);//false;
console.log(!!h);//false;

现在来说一说这四种常见的场景中感叹号的作用。"!"

1.条件判断中使用和操作布尔值【取反】

  JavaScript中,感叹号本来就是取反的意思。比如a===false;则!a===true;

  简单来说,感叹号可以把对的(true)变成错的(false),真的(true)变成假的(false)

  !true===false;

  !"hello"===false;

  !0===true;

  !""===true;

2.双感叹号用于转换值类型【强制转换为布尔值】

  感叹号在取反之前会先将数据类型转换为布尔类型,所以用感叹号操作后的值,结果一定是布尔值,只有两个,要么true,要么false。

  一个感叹号取反,两个感叹号就是取反后再取反,就和我们说的负负得正差不多是一个意思。

  由于是两个感叹号写在一起,可能会造成懵懂,这样写就会明白。

var a='abcd';
a=!(!a);//true !!a===!(!a);

3.自执行函数中使用

!!function(){
//function codes here
}();

自执行函数的写法有很多种,如下也都可以:

+function(){
//code
}(); -function(){
//code
}(); ~function(){
//code
}(); (function(){
//code
})(); (function(){
  //code
}());

其实这里的感叹号也好,加号也好,只是用了运算符优先级的这一特性,因为这几个运算符在JavaScript中优先级最高,会将紧紧相邻的js语句计算出结果,在计算的过程中,就会执行定义的匿名函数,就达到了自执行的效果。

总结:感叹号在js中有两个作用:

1.取反

2.将值转换为布尔值:true或false。

javascript中的感叹号 "!"的更多相关文章

  1. Javascript中的感叹号和函数function

    js函数前加分号和感叹号是什么意思?有什么用?:http://www.cnblogs.com/mq0036/p/4605255.html function与感叹号:https://swordair.c ...

  2. JavaScript中双叹号(!!)和单叹号(!)

    转自:JavaScript中双叹号(!!)作用 经常看到这样的例子: var a: var b=!!a; a默认是undefined.!a是true,!!a则是false,所以b的值是false,而不 ...

  3. 鉴定JavaScript中的数据类型

    众所周知,JavaScript是一门弱类型的语言,但是这并不代表JavaScript中没有数据类型.JavaScript中常见的数据类型有string.number.object等等,通常我们使用ty ...

  4. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  5. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  6. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  7. javascript中的操作符详解1

    好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...

  8. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  9. javascript中变量提升的理解

    网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...

随机推荐

  1. EC笔记:第4部分:18、接口正确使用,不易被误用

    好的接口容易被正确使用,不易被误用 考虑以下函数: void func(int year,int month,int day){ //一些操作 } 这个函数看似合理,因为参数的名字已经暴露了它的用途. ...

  2. 解析ListView联动的实现--仿饿了么点餐界面

    一.博客的由来 大神王丰蛋哥 之前一篇博客仿饿了点餐界面2个ListView联动(http://www.cnblogs.com/wangfengdange/p/5886064.html) 主要实现了2 ...

  3. 如何在VS 2010中使用 VS2013的解决方案(转)

    今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只是界面上扁平化的改变,平台工具集有改变但很大程度上可能向上兼容.在网上搜了一些文章,其中有一篇说到一个观点:        从 ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 6.并发通讯模式开发及注意事项

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  5. linux(六)__进程与任务控制

    一.程序.进程.线程 1.程序是一个普通文件,是一系列指令和数据的集合,是一个静态的实体,是程序员写好之后存储于外设之上的代码.它是"死"的,而进程和程序都是"活&quo ...

  6. session 存入数据库 php

     session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...

  7. 多页的TIFF图片在aspx页面分页显示

    一.逻辑实现:将数据库中的二进制TIFF图片读出并分页显示在页面上. 1.显示界面 public FrameDimension MyGuid; ; ; public static MemoryStre ...

  8. 在终端terminal运行ReactNative程序经常出现的问题

    各种问题汇总: 1.Unable to resolve modules lodash  (这里举例lodash,这个lodash也可以是别的.意思就是缺少当前模块,所以需要安装) npm instal ...

  9. Linq表达式和Lambda表达式用法对比

    什么是Linq表达式?什么是Lambda表达式?前一段时间用到这个只是,在网上也没找到比较简单明了的方法,今天就整理了一下相关知识,有空了再仔细研究研究 public Program() { List ...

  10. java知识总结(更新中)

    一.java 数据类型 基本类型(byte.short.int. long. char.float.double.boolean) 数字类型 整数型:byte(8).short(16).int(32) ...