说明:此文章用作个人学习记录,若有任何问题或建议欢迎大家在评论区讨论
文章目录
前言
通过上一篇文章数据类型-——进阶篇1
我们已经对最常用的两个数据类型 Number 和 String 有了一定的认识
本文将继续讲解7个基本数据类型的其余部分
详细讨论 Boolean(布尔值)
,undefined(未定义)
,Null(空值)
,Symbol(符号)
,BigInt(大整数)
这5种数据类型的实现方法、开发过程中的遇到的常见问题及其解决方案
一、 Boolean(布尔值)
1. 定义
Boolean
类型是 JavaScript 中最简单的数据类型,用于表示逻辑值
只有两个可能的值:true
(真)和 false
(假)
在开发过程中,Boolean
值主要用于控制程序逻辑流,例如条件判断、循环控制等。
2. 实现
直接声明一个 Boolean
变量:
let a = true; // 真
let b= false; // 假
3. 用法示例
- 条件判断:
Boolean
值广泛用于if
、else if
和else
语句。
let isJavaScriptEasy = true; // 赋值布尔值 true
if (isJavaScriptEasy) {
console.log('太简单了!');
} else {
console.log('菜就多练!');
}
//因为判断条件为真,所以最后终端输出 “太简单了!”
- 逻辑运算符:JavaScript 提供了三个主要的逻辑运算符:
&&
(与):当且仅当两个操作数都为true
时,结果为true
||
(或):只要有一个操作数为true
,结果就是true
!
(非):用于将一个布尔值取反
let isRaining = true;
let hasUmbrella = false;
if (isRaining && !hasUmbrella) { //如果下雨为真的同时,带伞为假
console.log('下雨没带伞,我湿透了!');//输出:“下雨没带伞,我湿透了!”
}
4. 常见问题与解决方法
-
4.1 隐式类型转换问题:
JavaScript 在某些情况下会将其他类型自动转换为布尔值,例如条件判断语句中小贴士:隐式转换,即计算机自动进行的转换操作
与之相对的是显式转换,即开发人员主动进行的转换操作
0,-0,0n(BigInt类型的0),NaN,null,undefined 和 " "(空字符串)都会被转换为
false
其他非空值(包括非空字符串、非零数字等)会被转换为true
,例如:if ('吸收元气') { //吸收元气这个字符串非空,所以被系统隐式转换为true console.log('元气弹!'); //输出“元气弹!” }
或许有朋友读到这里会认为,隐式类型转换只是个很常见的语言特性,并不能算作问题
那么请看接下来的几个例子:4.1.1 空字符串的隐式转换
if ("0") { console.log("字符串'0'被判断为true,条件执行了!"); }
在上面的例子中,if语句的判断条件 “0” 是个非空字符串,很显然它应该被转换为true
所以条件语句被执行了,但别着急我们接着往下看:4.1.2. 空字符串与数字比较
console.log(0 == "0");
-
在这个例子中,
"0"
是个非空字符串,
所以"0"
应该和4.1.1的例子一样,被隐式转换为true
-
而
数字0
根据定义,会被隐式转换为false
true 和 false 显然是不相等的,经过比较计算,终端应该输出false
但实际上终端输出的是ture!
也就是说计算机判定 数字0 和 字符串"0" 在比较上相等,这是为什么呢?
因为 JavaScript 在==
比较运算中,会尝试将符号两边先隐式转化成相同的数据类型,再进行比较
也就是说,先把 字符串"0"
隐式转化成数字 0
转换之后,数字0
等于数字0
,输出ture
解决方案:
为了避免因隐式转换导致的错误,建议使用显式转换和严格比较运算符:
-
使用严格相等运算符 (
===
)
严格相等运算符不会进行类型转换,只有在两个值及其类型都相同时才会返回true
。console.log(0 === "0"); // false console.log(false === "0"); // false
-
显式类型转换
通过使用Boolean()
函数将值显式转换为布尔值,来明确判断其布尔逻辑状态:let a = ""; if (Boolean(a)) { console.log("值是 truthy 值!"); } else { console.log("值是 falsy 值!"); }
二、 Undefined(未定义)
1. 定义
undefined 用于表示一个变量已经声明,但尚未赋值
简单来说,就是当创建变量后没有被赋值时,它的默认值就是 undefined。
2. 实现
2.1 声明了函数但未赋值
let a;
console.log(a); // 输出:undefined
2.2 函数没有返回值:
function a() {
// 函数中没有 return 语句
}
let result = a();
console.log(result); // 输出:undefined
如果一个函数没有返回值(即没有 return
语句),调用该函数的结果就是 undefined
。
2.3 访问不存在的对象属性:
let person = { name: "XiaoMing" };
console.log(person.age); // 输出:undefined
在这个例子中,对象 person
没有 age
属性,所以访问这个不存在的属性会返回 undefined
。
2.4 函数参数未传递:
function a(name) {
console.log(name); // 如果未传参,则 name 的值为 undefined
}
a(); // 输出:undefined
如果调用函数时未传递参数,参数会默认是 undefined
。
3. 常见问题与解决方法
3.1 调用未定义变量
问题: 代码格式管理不规范时,可能会出现调用未定义变量的情况
解决方法:
使用严格模式( "use strict"
),此时如果调用未定义的变量会报错
"use strict";
console.log(a); // 报错: a is not defined
3.2 多系统交互时,应区分 undefined 和 null
问题: 在多系统交互或处理 API 接口数据时,有时需要区分 undefined 和 null
解决方法:使用显式检查,判断区分后再调用
if (value === null) {
console.log('值为空');
} else if (value === undefined) {
console.log('值未定义');
}
3.3 显式赋值undefined
问题:
虽然JavaScript提供了显式设置变量为 undefined
的选项,
但不推荐这么做,因为大家默认undefined是未定义而不是空值
let a = undefined; // 不推荐
解决方法:
应该使用 null 来表示“空”值或“无效”值。
let a = null; // 正确做法
三、Null(空值)
1. 定义
null
是一个表示“空”或“没有值”的类型,通常用于手动重置变量或者对象引用
2. 实现
let a= null;
console.log(a); // 输出:null
3. 用法示例
- 表示对象不存在或不被引用。
- 重置变量,以清除其之前的值。
let user = { name: 'Xiaoming' };
user = null; // 清空对象引用
4. 常见问题与解决方法
问题:使用typeof null
类型检查,结果返回 object
:
这是 JavaScript 的上古bug,但是为了兼容性不会修复
可以把它当作JS的一种语言特性。。。
解决方法:使用严格比较(===
)来检查一个值是否为 null
。
console.log(typeof null); // 输出:object
console.log(null === null); // 输出:true
四、 Symbol(符号)
1. 定义
Symbol
是 ES6引入的一种新的数据类型
Symbol拥有唯一性,主要用作避免对象属性名冲突
2. 实现
创建一个 Symbol
:
let a= Symbol('你吃饭了吗');
console.log(a);
输出结果:
如图所示,Symbol在调试和输出时,会连Symbol()一起输出
这个表示法能让你在调试和输出时,能够清晰地知道这是一个 Symbol 值,而不是其他类型的数据。
3. 用法示例
- 作为对象的属性键来保证唯一性。
- 隐藏或保护对象属性不被意外覆盖。
let myObject = {};
let mySymbol = Symbol('key');
myObject[mySymbol] = 'value';
console.log(myObject[mySymbol]); // 输出:value
4. 常见问题与解决方法
4.1 Symbol的写法
Symbol()
的S要大写 (可能不算个大问题,但是经常有看到写错所以提醒下)
4.2 Symbol拥有唯一性
每次调用 Symbol() ,计算机都会创建一个唯一的 Symbol 值,
所以即使括号内的描述相同,它们也不相等。例如:
let symbol1 = Symbol('小明');
let symbol2 = Symbol('小明');
console.log(symbol1 === symbol2); // 输出:false
4.3 Symbol
无法隐式转换:
Symbol
不能和其他字符串类型直接连接,否则会抛出 TypeError
解决方法:使用 String()
函数或 symbol.toString()
方法将其显式转换。
let a= Symbol('测试');
console.log('结果是:' + a); // 抛出 TypeError
console.log('值是:' + a.toString()); // 输出:结果是:Symbol(测试)
五、 BigInt(大整数)
1. 定义
BigInt
是一种用于表示任意精度整数的新数据类型,用来处理比 Number
类型更大的整数
支持非常大的数值运算,而且不受限制于 JavaScript 的 Number.MAX_SAFE_INTEGER
2. 实现
let a= BigInt(12345678901234567890);
let b= 12345678901234567890n;
3. 常见用法
- 计算超大整数,比如说加密或科学计算
- 避免因浮点数限制导致的精度丢失
let sum = 9007199254740991n + 1n;
console.log(sum); // 输出:9007199254740992n
4. 常见问题与解决方法
与 Number
类型的混合运算问题:不能将 BigInt
与 Number
混合运算,否则会报错
解决方法:在混合运算前,使用显式转换。
let bigIntValue = 10n;
let numValue = 5;
// console.log(bigIntValue + numValue); // 会抛出 TypeError
console.log(bigIntValue + BigInt(numValue)); // 输出:15n
标签:console,log,Symbol,数据类型,进阶篇,let,零学起,true,undefined From: https://blog.csdn.net/2401_87242367/article/details/142994217