首页 > 编程语言 >JavaScript从零学起 —— 数据类型(进阶篇2)

JavaScript从零学起 —— 数据类型(进阶篇2)

时间:2024-10-17 18:46:09浏览次数:8  
标签:console log Symbol 数据类型 进阶篇 let 零学起 true undefined

说明:此文章用作个人学习记录,若有任何问题或建议欢迎大家在评论区讨论

文章目录


前言

通过上一篇文章数据类型-——进阶篇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 值广泛用于 ifelse ifelse 语句。
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

解决方案:

为了避免因隐式转换导致的错误,建议使用显式转换和严格比较运算符:

  1. 使用严格相等运算符 (===)
    严格相等运算符不会进行类型转换,只有在两个值及其类型都相同时才会返回 true

    console.log(0 === "0"); // false
    console.log(false === "0"); // false
    
  2. 显式类型转换
    通过使用 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 类型的混合运算问题:不能将 BigIntNumber 混合运算,否则会报错

解决方法:在混合运算前,使用显式转换。

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

相关文章

  • Chrome开发者工具不完全指南(四、性能进阶篇)
    https://blog.csdn.net/lisheng19870305/article/details/106507511前言Profiles面板功能的作用主要是监控网页中各种方法执行时间和内存的变化,简单来说它就是Timeline的数字化版本。它的功能选项卡不是很多(只有三个),操作起来比较前面的几块功能版本来说简单,但是里面的数据确......
  • python基础(数据类型一)
    在python语言中数据类型包含整数(int),浮点(float),复数(complex),布尔(bool),字符串(str),列表(list),元组(tuple),字典(dict),集合(set)以及空值(None)#数据类型比较多,今天之讲解整数(int),浮点(float),复数(complex),布尔(bool)这三个,其余的类型会单独分六个章节逐一讲解。一.整数(int):1.整数表示数值,没有小......
  • 变量与数据类型:程序的基本构建块!
    Java入门之旅:变量与数据类型的奥秘在编程的世界里,变量就像是每个程序员的好伙伴,它们在代码中存储着各种信息,帮助我们在计算机中执行复杂的逻辑。而数据类型则是对这些变量的基本属性定义,影响着它们的行为和存储方式。今天,就让我们一起探索Java中的变量和数据类型,揭开它们的......
  • ②C语言数据类型与变量
    数据类型1数据类型概要整形类型描述整数,字符类型描述字符,浮点型类型描述小数。特殊说明:布尔类型需要拥有的头文件(<stdbool.h)布尔类型的变量的取值是:true/false#definebool_Bool#definefalse0#definetrue1实例_Boolflag=true;if(flag)prin......
  • JAVA基础笔记1(变量与运算符+基本数据类型)
    目录一.开发工具1.快捷键常用二.HelloWorld案例:输出:心形三:变量与运算符3.1关键字3.2 标识符(identifier)3.3变量3.30变量的概念:3.31变量类型3.32引用数据类型:   类:class   数组:array   接口:interface   枚举:enum   注解:annotation   ......
  • Python编程基础之变量与数据类型
    一、变量    在Python中,变量是用来存储数据值的标识符。变量的命名需要遵循一定的规则:1. 变量名只能包含字母、数字和下划线。2. 变量名不能以数字开头。3. 变量名不能是Python中的关键字(如if、else、for等)。    Python可以这样定义变量:my_variable=......
  • JavaScript中的对象,常用内置对象和数据类型
    一、对象1.概念什么是对象?在JavaScript中,对象是一组无序的相关属性和方法集合,所有的事物都是对象,例如:字符串、数值、数组和函数等等。对象是由属性和方法组成的。属性:事物的特征,在对象中属性来表示(常用名词)方法:事物的行为,在对象中用方法来表示(常用动词)手机: 属性—......
  • 关于数据类型
    通常来说,根据数据类型可以将编程语言分为两类:强类型语言强类型语言(Stronglytypedlanguage)不仅强制要求事先声明变量,还要求声明每个变量的数据类型,这样编译器就能准确地知道这个变量中的值的类型。强类型语言在数据类型上要求很严格:必须事先说明变量中存放的数据的类型,而在......
  • java标识符和数据类型
    标识符定义:Java所有的组成部分都需要名字。类名,变量名以及方法名都被称为标识符。注意:1)所有标识符都应该以字母(A—Z或a—z),美元符($)或下划线(_)开始。2)首字符之后数字和任意字符组合。3)不能使用关键字作为方法名或变量名。4)标识符是大小写敏感的。数据类型1)强类型语言:要......
  • 有关C语言中的数据类型(持续更新)
    有关计算机中的数据单位:计算机存储容量基本单位是字节(byte)字节byte:8个二进制位(bit)为一个字节(B),最常用的单位。一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。计算机的最小存储单位:比特(bit)位bit(比特)(BinaryDigits):存放一位二进制数,即......