JavaScript基础(二): 数据类型

一.基本数据类型

基本数据类型是不可变的,存储在栈内存中

typeof 检测除了null之外的基本数据类型

示例:

var a = "id";
console.log(typeof a); // "string" - 字符串类型

1.undefined (未定义)

  • 变量声明后未赋值时默认值为 undefined
  • 函数没有返回值时,默认返回 undefined
  • 使用typeof检测返回 undefined时返回"undefined"

示例:

var x;
console.log(x); // undefined
console.log(typeof x); // "undefined"

2.Null (空值)

  • 表示一个 “空” 的值
  • 通常用于主动释放对象引用
  • typeof null会返回"object"(历史遗留 bug)
  • 与undefined的区别:null是主动设置的空值,undefined是未定义

示例:

var st = null;
console.log(st); // null
console.log(typeof st); // "object" - 特殊情况

比较undefined和null

console.log(undefined == null); // true(值相等)
console.log(undefined === null); // false(类型不同)

3.Boolean (布尔值)

  • 只有两个值:true和false
  • 常用于条件判断
  • 转换规则:0、“”、null、undefined、NaN 会转为 false, 其他值通常转为 true

示例:

var f_t = true;
console.log(f_t); // true

var f_f = false;
console.log(f_f); // false

转换规则:

console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean("hello")); // true
console.log(Boolean({})); // true(空对象为true)

4.Number (数值)

  • 所有数字都是以 64 位浮点数形式储存
  • 整数和小数没有明确区分
  • 特殊值:Infinity(无穷大)、-Infinity(负无穷大)、NaN(非数字)

数值表示:

var integer = 42;
var float = 3.14;
console.log(integer); // 42
console.log(float); // 3.14

在数字前使用不同开头可以定义不同的进制

对应方法:

进制开头
二进制0b或0B
八进制0o或0O
十六进制0x或0X

示例:

var hexNum = 0x11; // 十六进制,等于十进制的17
console.log(hexNum); // 17

var binNum = 0b1010; // 二进制,等于十进制的10
console.log(binNum); // 10
  • 特殊数值与检测
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
console.log("hello" / 2); // NaN
console.log(Number.isNaN(NaN)); // true - (检测NaN的唯一方法)
console.log(Number.isFinite(Infinity)); // false - 检测是否为有限数

4.String (字符串)

  • 用于表示文本数据
  • 可以用单引号 (‘’)、双引号 (“”) 或反引号 (``) 包裹
  • 反引号支持多行字符串和模板占位符${}

字符串创建:

var str1 = "hi";
var str2 = 'hi';  // 单引号定义
var str3 = `hi`;  // 反引号定义
var str4 = `第一行
第二行
第三行`;          // 多行字符串
console.log(str1, str2, str3, str4);

模板字符串 - 支持变量嵌入

var name = "Alice";
var greeting = `你好, ${name}, 今天是 ${new Date().getDate() 号}`;
console.log(greeting);

字符串拼接特性:任何数据与字符串相加结果都为字符串

console.log(str1 + str2); // "hihi"
console.log(10 + 20 + "hi"); // "30hi" - 先计算数字相加
console.log("hi" + 10 + 20); // "hi1020" - 从左到右依次拼接      

字符串属性和方法:

var str = "hello";
console.log(str.length); // 5(长度属性)
console.log(str.toUpperCase()); // "HELLO"(转换为大写)
console.log(str.indexOf("l")); // 2(查找字符位置,返回第一个匹配索引)
console.log(str.slice(1, 4)); // "ell"(截取子串,从索引1到3)
console.log(str.charAt(2)); // "l"(获取指定位置字符)
console.log(str.split("")); // ["h", "e", "l", "l", "o"](分割为数组)

6.Symbol (符号)

  • ES6 新增类型,表示唯一的、不可变的值
  • 主要用于对象属性的唯一标识符,避免属性名冲突
  • 不能使用new关键字创建

示例:

const id1 = Symbol("id");
const id2 = Symbol("id");
console.log(id1 === id2); // false - 即使描述符相同,也是不同的Symbol
console.log(id1); // Symbol(id)
console.log(typeof id1); // "symbol"

7.BigInt (任意大整数)

  • ES2020 新增类型,用于表示任意精度的整数
  • 通过在整数末尾加n或使用BigInt()构造函数创建
  • 不能与 Number 类型直接运算,需要先转换类型

示例:

var bigNum1 = BigInt(9007199254740991);
var bigNum2 = 9007199254740991n; // 直接在数字后加n
console.log(bigNum1); // 9007199254740991n

二.复杂数据类型(引用类型)

复杂数据类型存储在堆内存中,变量中存储的是指向堆内存的引用地址

1.Object (对象):

  • JavaScript 中所有非基本类型都是对象
  • 由键值对(key-value)组成
  • 键通常是字符串,值可以是任何类型

对象字面量创建:

var person = {
    name: "Wendy",
    age: 22,
    isStudent: true,
    hobbies: ["reading", "coding"],
    greet: function() {
        console.log(`Hello, I'm ${this.name}`);
    },
};

访问, 修改, 添加, 删除, 调用对象属性:

// 访问属性
console.log(person.name);           // "Wendy"(点表示法)
console.log(person['age']);         // 22(方括号表示法)

// 修改属性
person.age = 23;

// 添加新属性
person.email = "wendy@example.com";

// 删除属性
delete person.isStudent;

// 调用方法
person.greet();                     // "Hello, I'm Wendy"

// 对象遍历
for (var key in person) {
    console.log(`${key}: ${person[key]}`);
}

2.Function (函数)

  • 可执行的代码块,用于封装逻辑
  • 可以作为值传递,也可以作为对象的属性(方法)

函数声明:

function fn(x) {
    var y = 2 * x;
    return y;
}
console.log(fn(3)); // 6

函数表达式:

const multiply = function(a, b) {
    return a * b;
};

箭头函数(ES6):

const add = (a, b) => a + b;

调用函数:

console.log(add(2, 3));             // 5
console.log(multiply(4, 5));        // 20

函数作为参数:

function calculate(a, b, operation) {
  return operation(a, b);
}
console.log(calculate(10, 2, divide));      // 5

内置对象方法:

console.log(Math.max(1, 2, 4, 5)); // 5 - 求最大值
console.log(Math.min(1, 2, 4, 5)); // 1 - 求最小值
console.log(Math.random()); // 0-1之间的随机数

Date对象:

var day = new Date();
console.log(day.toLocaleString()); // 本地时间字符串
console.log(day.getFullYear()); // 当前年份

3.Array (数组)

  • 存储有序的集合
  • 元素可以是任意类型
  • 长度可以动态变化
  • 索引从 0 开始

创建数组:

let arr = [1, "hello", true, null, { key: "value" }];
let emptyArr = new Array(); // 使用构造函数
// 数组长度
console.log(arr.length); // 5

// 访问元素
console.log(arr[0]); // 1 - 访问第一个元素(索引从0开始)
console.log(arr[1]); // "hello" - 访问第二个元素

// 修改元素
arr1[0] = "first"; // 修改第一个元素
console.log(arr1);

// 数组遍历
arr.forEach(item => {
  console.log(item);
});

// 数组转换
let numbers = [1, 2, 3];
console.log(numbers.join("-")); // "1-2-3"

常用方法:

arr.push("new element"); // 在末尾添加元素
console.log(arr.pop()); // 移除并返回最后一个元素
arr.unshift("first"); // 添加到开头
console.log(arr.shift()); // 移除第一个元素
console.log(arr.indexOf("hi")); // 查找元素索引
console.log(arr.slice(1, 4)); // 截取子数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值