JavaScript基本数据类型(3)- 布尔,null,undefined

87 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

布尔 boolean

布尔值只有 两个值 truefalse

  • 只有 0,NaN,' ',null,undefinedfalse 六个值会转换成False,其余的都转换成 True,没有任何特殊情况

*转换成布尔类型

其他类型转换哼布尔类型有三种方式:

1,Boolean
console.log(Boolean(10));           // true
console.log(Boolean('10'));         // true
console.log(Boolean(true));         // true
console.log(Boolean(false));        // false
console.log(Boolean(null));         // false
console.log(Boolean(NaN));          // false
console.log(Boolean(''));           // false
console.log(Boolean(undefined));    // false
console.log(Boolean(0));            // false
2,!/!!
// !单感叹号,先把后面的(值/表达式值返回值)转换成 Boolean 值,再对其取反
console.log(!2 + '');   // 'false'
console.log(!'');       // true
console.log(![]);       // false
console.log(!null);     // true
console.log(!NaN);      // true

// !!双感叹号的功能等同于 boolean,可以理解成语法糖的写法
console.log(!![]);          // true
console.log(!!{});          // true
console.log(!!'');          // false
console.log(!!null);        // false
console.log(!!undefined);   // false
console.log(!!NaN);         // false
console.log(!!0);           // false
console.log(!!false);       // false
3,条件判断
// if 条件后面的 () 会对里面最终产出的值进行 Boolean 的转换,为true就执行语句
if (10 + '10px') {}		// ('1010px') ==> true

if (10 - '10px') {}		// (NaN) ==> false

if (!(10 - '10px')) {}	// (!(NaN)) ==> (true) ==> true

if (NaN) {}				// (NaN)  ==> false

if (!NaN) {}			// (!(NaN)) ==> (true) ==> true

空对象指针 null

代表没有,无,意料之中的没有 ==> (开始不知道值,手动设置 null,后期再进行赋值操作,表示"没有对象")

let a = null;
// 我们开始不知道给null赋什么值,所以先给它一个空值,等想赋值的时候再给他

let a = 0;
// 有些代码可能会按照这种方式给不确定的值进行赋值,但记住,0是在栈内存中有自己的储存空间的,而null是完完全全的不暂居空间,一般赋空值用null
  • null 的主要用途就是 在赋值不确定的情况下,用一个null代替赋值,后面用在时候再重新赋值
  • 初始赋值用null,不占据占内存空间,虽然只有一点点点
  • 凡是指向 null 的变量都是不知想任何地址的,null 是一个空对象指针

未定义undefined

也代表没有,无,意料之外的没有 ==> (表示"缺少值",就是此处应该有一个值,但是还没有定义)

let a;  						// 1. 创建一个变量没有赋值,默认值为undefined
function fn() {}; fn()		 	 // 2. 函数默认 return 返回值为 undefined
function fn(x) {consoloe.log(x)}; fn()	 // 2. 调用函数时没有传递实参给形参,形参为undefined
let obj = {}; obj.name			 // 3. 访问不存在的属性名,返回为undefined
let arr = [, 20, , 'a'];		// 4. 数组中没有给对应的索引号传值,0和1的位置为 undefined