总结js中数据类型的bool值及其比较

本文深入解析JavaScript中布尔值的特性及特殊对象的比较规则,包括0、''、null等值的布尔转换,以及不同对象之间的比较行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 false, 其他(包括{}, [], Infinity)为true.

可以使用Boolean()函数或是两次取非就能获得对象的布尔值,例如Boolean(undefined)和!!undefined同样能取得布尔值false,

对于0, '', null, undefined, NaN,{}, [], Infinity求布尔值,分别是false false false false false true true true.

因此我们知道的一点是:对象的布尔值是true,即使是对象{}。

另外, 不同的对象比较返回false,只有引用相同的对象才返回true,如:

var a = b = {};

console.log(a==b) ; //true

console.log({}=={}); //false

console.log([]==[]); //false,因为[]是object

还需要注意的是:

 console.log(new Boolean(false)==false);   //true
 console.log(new Boolean(true)==true);   //true

 

另外,js中有Boolean对象,例如:通过new Boolean(false)能获得一个初始值为false的布尔对象,但是不能用new Boolean()来获取

对象的布尔值,因为这样我们就new了一个布尔对象,既然是对象,我们获得的就永远是true,所以不幸的是,

if(new Boolean(false)){//这里面的代码一定会执行,即使布尔对象的值是false}. 再次强调,用Boolean()或两次取非来获取布尔值.

 

如果0, '', null, undefined, NaN,{}, [], Infinity,false, true互相比较(执行"=="运算)会怎么样呢?

   function k(r){
      console.log(r,": ", r==false,r==true,r==0,r=='',r==undefined,r==null,r==NaN,r==Infinity,r=={},r==[]);
   }

   k(true);
   k(false);
   k(0);
   k('');
   k(undefined);
   k(Infinity);
   k(NaN);
   k({});
   k([]);

 

   由于将null作为参数传给函数时,相当于传入了undefined,所以对于null的检验,需要在修改k函数,即在函数内部让r=null;

从结果(结果就不列出来了)可以得到一些结论:

1、0, '', [], false 互相比较(包括和自身比较)都返回true, 与其他值比较返回false;

2、undefined 和 null 互相比较返回true, 和自身比较也返回true, 其他情况返回false;

3、Infinity只和自身比较返回true;

4、NaN,{}和任意值比较都是返回false;

5、除了true==true以外, true和其他值哪怕非0的数字,非空字符串,非空对象,非空数组都是返回false。

 

 

-------------------------------转载注明出处: http://www.cnblogs.com/suspiderweb/

 

转载于:https://www.cnblogs.com/suspiderweb/p/4908572.html

### JavaScript 数据类型的定义与分类 JavaScript 是一种动态弱类型的语言,其数据类型分为 **基本数据类型** 和 **引用数据类型** 两大类。 #### 基本数据类型 基本数据类型是按访问的数据类型,即可以直接操作存储在变量中的实际。以下是常见的基本数据类型及其定义: 1. **String(字符串)** 字符串是由零个或多个字符组成的序列,用于表示文本信息[^3]。 2. **Number(数)** 数类型可以表示整数和浮点数,在 JavaScript 中统一为 `Number` 类型。可以通过拼接空字符串或将数转换为字符串的方式实现类型转换[^1]。 3. **Boolean(布尔)** 布尔仅有两个可能的:`true` 或 `false`,通常用于逻辑判断。 4. **Null(空)** 表示一个空对象指针,尽管它的 `typeof` 返回的是 `'object'`,但实际上它是一个独立的基本数据类型[^2]。 5. **Undefined(未定义)** 当声明了一个变量但尚未赋时,默认为 `undefined`;或者当函数无返回时也会默认返回 `undefined`。 6. **Symbol(符号)** Symbol 是 ES6 新增的一种原始数据类型,主要用于创建唯一的标识符[^1]。 7. **BigInt(大整数)** BigInt 是另一种新增的数据类型,允许表示大于 `Number.MAX_SAFE_INTEGER` 的安全范围之外的大整数[^1]。 #### 引用数据类型 引用数据类型是指向内存中某个位置的对象引用,而不是直接保存本身。主要包含以下几种: 1. **Object(对象)** 对象是一种复杂的数据结构,由键对组成,能够封装多种属性和方法。例如普通的对象字面量 `{key: value}`、数组 `[item1, item2]` 等都属于对象范畴[^3]。 2. **Array(数组)** 虽然语法上看起来像列表,但在底层实际上也是对象的一种特殊形式,具有可变长度以及内置的方法集合[^4]。 3. **Function(函数)** 函数本质上也是一种特殊的对象,它可以被调用并执行特定的操作[^3]。 4. **Date(日期)** Date 对象用于处理时间戳及相关运算,提供了丰富的 API 来获取和设置年月日及时分秒等信息[^3]。 5. **RegExp(正则表达式)** 正则表达式对象用于匹配字符串模式,支持复杂的查找替换功能[^3]。 --- ### 示例代码展示不同类型的应用场景 ```javascript // 基本数据类型 let str = "Hello"; // String console.log(typeof str); // 输出 string let num = 42; // Number console.log(typeof num); // 输出 number let bool = true; // Boolean console.log(typeof bool); // 输出 boolean let nul = null; // Null console.log(typeof nul); // 输出 object (历史遗留问题) let undf; // Undefined console.log(typeof undf); // 输出 undefined let sym = Symbol("unique"); // Symbol console.log(typeof sym); // 输出 symbol let bigInt = 123n; // BigInt console.log(typeof bigInt); // 输出 bigint // 引用数据类型 let obj = { name: "Alice", age: 20 }; // Object console.log(typeof obj); // 输出 object let arr = [1, 2, 3]; // Array console.log(typeof arr); // 输出 object (注意:Array 实际上继承自 Object) function greet() { console.log("Hi!"); } // Function console.log(typeof greet); // 输出 function let date = new Date(); // Date console.log(typeof date); // 输出 object let regex = /abc/; // RegExp console.log(typeof regex); // 输出 object ``` --- ### 总结 JavaScript 提供了七种基本数据类型(String、Number、Boolean、Null、Undefined、Symbol、BigInt),以及若干种引用数据类型(Object 及其派生)。每种数据类型都有独特的用途和行为特性,理解它们的区别对于编写高效可靠的程序至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值