js中两个!!的理解
在js中经常有两个!!出现,经常让人难以理解
(function () {
var a = 10;
var b = 20;
function add(num1, num2) {
var num1 = !!num1 ? num1 : a;
var num2 = !!num2 ? num2 : b;
return num1 + num2;
}
window.add = add;
})();
var sum=add("10", "20");
console.log(sum);
要理解上面的var num1 = !!num1 ? num1 : a;首先要明白其他变量类型和Boolean类型的相互转化。
0、-0、null、""、false、undefined 或者 NaN转化为false,其他为true
如下都是false
var myBoolean=new Boolean();
var myBoolean=new Boolean(0);
var myBoolean=new Boolean(null);
var myBoolean=new Boolean("");
var myBoolean=new Boolean(false);
var myBoolean=new Boolean(NaN);
而下面都是true
var myBoolean=new Boolean(1);
var myBoolean=new Boolean(true);
var myBoolean=new Boolean("true");
var myBoolean=new Boolean("false");
var myBoolean=new Boolean("Bill Gates");
具体参考http://www.w3school.com.cn/js/js_obj_boolean.asp
根据上面的转化规律来看var num1 = !!num1 ? num1 : a;,如果num1是undefined,null,那么!num1是true,!!num1是false,以此可以看出这句代码的意思是如果num1不是undifined和null则取参数的值num1,否则取变量a的值。这里并不能判断num1是否是数值,所以传入字符串也是可以计算的,计算结果是两个字符串相加"1020",如果传入的都是数值,则会把数值相加,结果是30
还可以参考http://blog.csdn.net/dyllove98/article/details/8590638
(function () { var a = 10; var b = 20;
function add(num1, num2) { var num1 = !!num1 ? num1 : a; var num2 = !!num2 ? num2 : b;
return num1 + num2; }
window.add = add; })();
var sum=add("10", "20"); console.log(sum);
js中两个!!的理解的更多相关文章
- js中两个对象的比较
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...
- 关于js中两种定时器的设置及清除(转载)
1.JS中的定时器有两种: window.setTimeout([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法 ...
- JS中原型链的理解
new操作符具体干了什么呢?其实很简单,就干了三件事情. var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj); 第一行,我们创建了 ...
- Js中函数式编程的理解
函数式编程的理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程与命令式编程最大的不同其实在于,函数式编程关心数据的映射,命令式编程关心解决问 ...
- 关于js中两种定时器的设置及清除
1.JS中的定时器有两种: window.setTimeout([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法 ...
- JS中对于prototype的理解
JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...
- js中boolean类型的理解
<html> <head> <script type="text/javascript"> var x="12"; aler ...
- 关于js中this指向的理解总结!
关于js中this指向的理解! this是什么?定义:this是包含它的函数作为方法被调用时所属的对象. 首先,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁 ...
- js中两个日期大小比较,获取当前日期,日期加减一天
一.两个日期大小比较 1.日期参数格式:yyyy-mm-dd // a: 日期a, b: 日期b, flag: 返回的结果 function duibi(a, b,flag) { var arr = ...
随机推荐
- 笔记本串口连接IBM 小机
首先要有一根两头母的九针串口线&USB转串口线其次,配置波特率19200.数据位8.停止位1.无校验位.流控:Xon/Xoff P4是9600,P5 P6都是19200了( 默认是19200波 ...
- easyui treegrid 动态展开数据(暂记)
ClassifyAdminSynMsgSvr.GetCLFLList("<%=CurUTag %>", 1, "", function (ret) ...
- 体验 PHP under .NET Core
昨天在 The week in .NET 中发现 Scott Hanselman 的这篇博文 Peachpie - Open Source PHP Compiler to .NET and WordP ...
- tensorRT 使用tensorflow的pb问价构建推理
- debian安装nodejs
https://nodejs.org/en/download/ 二进制安装 sudo wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux ...
- zabbix自动发现主机并加入组绑定模板
在被监控主机多的情况下,怎样将这些主机加入zabbix server进行监控呢?下面将介绍下zabbix自动发现功能 1.创建自动发现规则 创建“规则名称,配置ip范围及检查方式”,点击“增加”,完成 ...
- arcengine新建要素类
ArcGIS里面新建数据集,看起来简单,平时都是默认创建,实际上好多细节问题我们都没注意到 一.在数据集上新建要素类: How to create a feature class within a f ...
- ionic使用cordova插件中的Screenshot截图分享功能
需要实现操作,考试完成后需要将成绩生成一张图片,分享出去, import { Screenshot } from '@ionic-native/screenshot'; constructor(pri ...
- ida pro65
https://elinux.org/CI20_Dev_Zone#Making_a_bootable_SD_card_from_sources IDAPro65.exe: 下载地址:http://pa ...
- Androidstudio_LinearLayout