zoukankan      html  css  js  c++  java
  • JavaScript中为什么需要!!?

    1. 布尔值为false的值

    在JavaScript中,布尔值为 false的值有如下几个:

    • undefined
    • null
    • false
    • 0
    • NaN
    • ""''(空字符串)

    2. !!的作用

    将上述值与 false作比较。

    console.log(undefined==false); // false
    console.log(null==false); // false
    console.log(false==false); // true
    console.log(0==false); // true
    console.log(NaN==false); // false
    console.log(""==false); // true
    console.log(''==false); // true
    

    发现 undefined==falsenull==falseNaN==false的值均为 false,如果加上 !!,结果如下:

    console.log(!!undefined==false); // true
    console.log(!!null==false); // true
    console.log(!!false==false); // true
    console.log(!!0==false); // true
    console.log(!!NaN==false); // true
    console.log(!!""==false); // true
    console.log(!!''==false); // true
    

    事实上,!!的作用是将值的类型强制转化为布尔类型。

    3. 回顾条件判断语句

    3.1 一个例子

    var b = 0;
    if(b){
    	console.log('true');
    } else {
    	console.log('false'); // 执行这行代码
    }
    
    var b = 0;
    if(b&&true){
    	console.log('true');
    } else {
    	console.log('false'); // 执行这行代码
    }
    
    var b = 0;
    if(!!b&&true){
    	console.log('true');
    } else {
    	console.log('false'); // 执行这行代码
    }
    

    因此,if语句的条件表达式会执行隐式类型转换

    3.2 另一个例子

    function test(value){
    	return value && true;
    }
    console.log(test(0)); // 0
    
    function test(value){
    	return !!value && true;
    }
    console.log(test(0)); // false
    

    可以看到,!!value强制转化为布尔值。

  • 相关阅读:
    java类型转换
    JVM内存各个区域分工简单介绍
    用数组实现栈
    一些关于Spring的随笔
    设计模式学习笔记(三)之静(动)态代理模式、适配器模式
    浅谈经典排序算法
    PetStore项目总结
    设计模式学习笔记(二)之观察者模式、装饰者模式
    Spring的校验(Validator)
    设计模式学习笔记(一)之工厂模式、单例模式
  • 原文地址:https://www.cnblogs.com/gzhjj/p/11384249.html
Copyright © 2011-2022 走看看