001-基础语法

1. 变量与常量

2. 数据类型

2.1. 数据类型总结

基本数据类型 特点
Number 数字:整型,浮点型,NaN, Infinity
String 字符串:
Boolean 布尔值:true, false
undefined 未定义:变量未赋值,函数无返回值
null 空值:
BigInt 大整数
Symbol 符号
引用数据类型 特点
Array 数组
Object 对象
Function 函数
Date 日期
RexExp 正则表达式
Error 错误对象
值传递与引用传递的区别

let a = 10;
let b = a;  // b 是 a 的副本
b = 20;  // b 改变了,但 a 不受影响,a 仍然是 10
let arr1 = [1, 2, 3];
let arr2 = arr1;  // arr2 是 arr1 的引用
arr2[0] = 99;  // 修改 arr2 也会影响 arr1
console.log(arr1[0]);  // 输出 99,arr1 被修改了

2.2. 类型转换(基本类型之间)

方法 要求 异常结果
Number() 纯数字字符串->数字 包含非数字字符->返回NaN
parseInt() 数字、加号、减号开头,提取整数部分 非数字字符开头->返回NaN
parseFloat() 数字、加号、减号开头,提取整数+小数部分,包括小数点 非数字字符开头->返回NaN
方法 要求 处理方式 特点
与空字符串相加 任何类型 内建规则+toString() 对象转换为"[object Object]"
toString() 引用类型(null和undefined用会报错) toString() 基本类型使用会抛出错误
String() 任何类型 内建规则+toString() 通用

3. 数据类型判断方法

方法 严格程度 底层原理 特殊值备注
Object.is() 🌟🌟🌟🌟🌟 SameValue ✅ NaN === NaN,✅ 区分 +0 和 -0
Number.isNaN() 🌟🌟🌟🌟🌟 === NaN(无类型转换) ✅ 精确判断 NaN,❌ 不误判字符串
includes() 🌟🌟🌟🌟🌟 SameValueZero ✅ NaN == = NaN,✅ +0 === -0(不区分)
=== 🌟🌟🌟🌟 Strict Equality ❌ NaN !== NaN,✅ +0 === -0(不区分)
indexOf() 🌟🌟🌟 === ❌ 无法识别 NaN,✅ 匹配 +0/-0 (不区分)
isNaN() 🌟🌟 Number() + isNaN ⚠️ 易误判:如 isNaN('abc') → true
== 🌟 Abstract Equality ❌ NaN,⚠️ 类型自动转换,易出错
//两种等于号
console.log("== vs ===");
console.log(0 == '0'); // true ✅ 类型转换
console.log(0 === '0'); // false ❌ 类型不同
//判断 NaN
console.log("\nNaN 测试");
console.log(NaN == NaN); // false ❌
console.log(NaN === NaN); // false ❌
console.log(Object.is(NaN, NaN)) // true ✅
console.log(isNaN('hello')); // true ⚠️ 易误判
console.log(Number.isNaN('hello')) // false ✅ 不会误判
console.log(Number.isNaN(NaN)); // true ✅
//区分+0  -0
console.log("\n+0 / -0 测试");
console.log(+0 === -0); // true ✅ 不区分
console.log(Object.is(+0, -0)); // false ✅ 区分
//indexOf vs includes 对 NaN 的处理
console.log("\nindexOf vs includes 对 NaN 的处理");
let arr = [1, 2, NaN];
console.log(arr.indexOf(NaN)); // -1 ❌ 无法找到 NaN
console.log(arr.includes(NaN)); // true ✅ 能找到 NaN
//indexOf vs includes 对 +0/-0 的处理
console.log("\nindexOf vs includes 对 +0/-0 的处理");
let arr2 = [+0, -0];
console.log(arr2.indexOf(-0)); // 0 ✅ 视作相等
console.log(arr2.includes(-0)); // true ✅ 视作相等
let arr3 = [+0];
console.log(arr3.indexOf(-0)); // 0 ✅ 视作相等
console.log(arr3.includes(-0)); // true ✅ 视作相等
//Object.is 和 includes 的 SameValue 对比
console.log("\nObject.is 和 includes 的 SameValue 对比");
console.log(Object.is(42, 42)); // true ✅
console.log(Object.is('a', 'a'));// true ✅
console.log(Object.is([], [])); // false ❌(引用不同)
let arr4 = [1,2,3];
let arr5 = arr4;
console.log(Object.is(arr4,arr5)); //true ✅引用相同

|317