javascript中的感叹号 "!"
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中的感叹号 "!"的更多相关文章
- Javascript中的感叹号和函数function
js函数前加分号和感叹号是什么意思?有什么用?:http://www.cnblogs.com/mq0036/p/4605255.html function与感叹号:https://swordair.c ...
- JavaScript中双叹号(!!)和单叹号(!)
转自:JavaScript中双叹号(!!)作用 经常看到这样的例子: var a: var b=!!a; a默认是undefined.!a是true,!!a则是false,所以b的值是false,而不 ...
- 鉴定JavaScript中的数据类型
众所周知,JavaScript是一门弱类型的语言,但是这并不代表JavaScript中没有数据类型.JavaScript中常见的数据类型有string.number.object等等,通常我们使用ty ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- javascript中的操作符详解1
好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
- javascript中变量提升的理解
网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...
随机推荐
- 微信小程序基础入门
准备 Demo 项目地址 https://github.com/zce/weapp-demo Clone or Download(需准备GIT环境) $ cd path/to/project/root ...
- IBatisNet -- 保护你的配置文件及映射文件信息
通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...
- Entity Framework 教程——创建实体数据模型
创建实体数据模型: 本文将带你创建实体数据模型(EDM)SchoolDB数据库和理解基础建设模块. 实体数据模型(EDM)是用于描述实体之间关系的一种模型,以下将使用Visual Studio 201 ...
- ASP.NET MVC——CodeFirst开发模式
Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First.Database First是最老也是应用得最广泛的一种设计方式 ...
- ASP.NET MVC——Razor视图引擎
Razor是MVC框架视图引擎,我们今天就来说一说Razor视图引擎. 首先还是来创建一个基础项目叫Razor来演示. 先来定义一个Model叫Product public class Product ...
- 服务器搭建多个tomcat服务器
以三个tomcat为例: 先配置环境变量: 编辑 /etc/profile 文件 添加三个tomcat环境变量:value为tomcat目录 //第一个tomcatCATALINA_BASE=/usr ...
- java web学习总结(二十八) -------------------JSP中的JavaBean
一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...
- 传统软件和SaaS,差异究竟在哪里
这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...
- mysql查询本周、月、季度、年
#查询本周记录 select * from product_process where WEEKOFYEAR(update_time)=WEEKOFYEAR(now()); #查询本月数据 selec ...
- 常用ASCII CHR碼對照
因為開發需求,把對照表留下來一下. Chr(0) Null Chr(29) 分组符 Chr(38) & Chr(48) 0 Chr(8) 退格 Chr(30) 記錄分離符號 Chr(39) ‘ ...