JavaScript 数据类型笔记

原始类型 (Primitive Types)

JavaScript 包含以下几种基本的数据类型:

1. 字符串 (String)

字符串可以使用单引号或双引号。

// 将两部分字符串拼接起来,加上标点和空格
var strPart1 = "Hello";
var strPart2 = "World";
var str = strPart1 + ", " + strPart2 + "!";  
alert("str = " + str);  // 输出:str = Hello, World!

var str = "Hello, World!"; // 定义字符串变量
var strLength = str.length;  // 获取字符串长度
alert("str.length = " + strLength);  // 输出:str.length = 13

var strPart1 = "Hello";
var strPart2 = "World";
// 字符串拼接示例
var greeting = strPart1 + ", " + strPart2 + "!";  // 再次拼接两个字符串
alert("greeting = " + greeting);  // 输出:greeting = Hello, World!

var str = "Hello, World!";
// 转换为大写
var upperCaseStr = str.toUpperCase();  // 将字符串转换为大写
alert("str.toUpperCase() = " + upperCaseStr);  // 输出:str.toUpperCase() = HELLO, WORLD!

var str = "Hello, World!";
// 转换为小写
var lowerCaseStr = str.toLowerCase();  // 将字符串转换为小写
alert("str.toLowerCase() = " + lowerCaseStr);  // 输出:str.toLowerCase() = hello, world!

var str = "Hello, World!";
// indexOf() 获取指定字符串在当前字符串中第一次出现的索引
var indexOfHello = str.indexOf("Hello");  // 获取"Hello"在字符串中的索引
alert("str.indexOf('Hello') = " + indexOfHello);  // 输出:str.indexOf('Hello') = 0

var str = "Hello, World!";
// lastIndexOf() 获取指定字符串在当前字符串中最后一次出现的索引
var lastIndexOfWorld = str.lastIndexOf("World");  // 获取"World"在字符串中的最后一个索引
alert("str.lastIndexOf('World') = " + lastIndexOfWorld);  // 输出:str.lastIndexOf('World') = 7

var str = "Hello, World!";
// replace() 替换指定字符串
var replacedStr = str.replace("World", "JavaScript");  // 将字符串中的"World"替换为"JavaScript"
alert("str.replace('World', 'JavaScript') = " + replacedStr);  // 输出:str.replace('World', 'JavaScript') = Hello, JavaScript!

var str = "Hello, World!";
// substr() 截取子字符串
var substrExample = str.substr(7, 5);  // 从索引7开始,截取5个字符
alert("str.substr(7, 5) = " + substrExample);  // 输出:str.substr(7, 5) = World

var str = "Hello, World!";
// substring() 截取子字符串
var substringExample = str.substring(7, 12);  // 从索引7开始,到索引12结束(不包括12)
alert("str.substring(7, 12) = " + substringExample);  // 输出:str.substring(7, 12) = World

var str = "Hello, World!";
// split() 拆分字符串
var splitStr = str.split(", ");  // 按", "分隔字符串,结果是一个数组
alert("str.split(', ') = " + splitStr);  // 输出:str.split(', ') = Hello,World!
    

2. 数字 (Number)

数字类型包括整数、浮点数、NaN、Infinity 等。

// 数字示例
var num = 42;
alert("num:" + num); // 输出数字

// 浮点数示例
var floatNum = 3.14;
alert("floatNum:" + floatNum); // 输出浮点数

// NaN (Not a Number) 示例
var invalidNum = "abc" / 4;
alert("invalidNum:" + invalidNum); // 输出 NaN

// Infinity 示例
var infinityNum = 10 / 0;
alert("infinityNum:" + infinityNum); // 输出 Infinity

// isNaN() 函数:判断是否不是一个数字
var result = isNaN("Hello");
alert("isNaN('Hello'):" + result); // true

// parseInt() 函数:将字符串转换为整数
var intValue = parseInt("123.456");
alert("parseInt('123.456'):" + intValue); // 123

// parseFloat() 函数:将字符串转换为浮点数
var floatValue = parseFloat("123.456");
alert("parseFloat('123.456'):" + floatValue); // 123.456

// Math.ceil() 函数:向上取整
var ceilValue = Math.ceil(4.3);
alert("Math.ceil(4.3):" + ceilValue); // 5

// Math.floor() 函数:向下取整
var floorValue = Math.floor(4.7);
alert("Math.floor(4.7):" + floorValue); // 4

// Math.round() 函数:四舍五入
var roundValue = Math.round(4.5);
alert("Math.round(4.5):" + roundValue); // 5

// Math.random() 函数:生成 0 到 1 之间的随机数
var randomValue = Math.random();
alert("Math.random():" + randomValue); // 生成一个 0 到 1 之间的随机数
    

3. 布尔值 (Boolean)

布尔类型只有两个值:true 和 false。

// 规律:“有”就转换成 true,“没有”就转换成 false
alert("Boolean(1) = " + Boolean(1)); // true
alert("Boolean(0) = " + Boolean(0)); // false
alert("Boolean('') = " + Boolean("")); // false
alert("Boolean('abc') = " + Boolean("abc")); // true
alert("Boolean(null) = " + Boolean(null)); // false
alert("Boolean(NaN) = " + Boolean(NaN)); // false
alert("Boolean(undefined) = " + Boolean(undefined)); // false
alert("Boolean(Infinity) = " + Boolean(Infinity)); // true
		
// 布尔示例
var isTrue = true;
var isFalse = false;
alert("isTrue = " + isTrue + ",isFalse = " + isFalse); // 输出布尔值
    

4. 数组 (Array)

数组是一个可以存储多个值的集合,使用中括号表示。

// 数组示例
var arr = [1, 2, 3, 4, 5];
alert("arr:" + arr); // 输出数组

// 访问数组中的元素
alert("arr[0]:" + arr[0]); // 输出第一个元素

// 获取数组的长度
alert("arr.length:" + arr.length); // 输出数组长度
    

5. 对象 (Object)

对象用于存储键值对,使用大括号表示。

/*
Object类型:
    1、Object类型是所有类型的超类,自定义的任何类型,默认继承Object。
    2、Object类包括哪些属性?
        - prototype属性:给类动态扩展属性和函数。
        - constructor属性:表示对象的构造函数。
    3、Object类包括哪些函数?
        - toString():返回对象的字符串表示。
        - valueOf():返回对象的原始值。
        - toLocaleString():返回对象的本地化字符串表示。
    4、JS中定义的类默认继承Object,会继承Object类的所有属性和方法。
       自定义类也有prototype属性。

    5、如何定义类和创建对象?
        - 语法1:function 类名(形参){}
        - 语法2:类名 = function(形参){}

        创建对象语法:new 构造方法名(实参);
*/

// 示例:定义一个简单的函数
function sayHello() {
    alert("Hello");
}

// 调用普通函数
sayHello();

// 通过new操作符,将sayHello函数当作类来创建对象
var obj = new sayHello(); // obj是保存内存地址的引用,指向堆中的对象

// 定义一个学生类
function Student() {
    alert("Student.....");
}

// 当做普通函数调用
Student();

// 当做类来创建对象
var stu = new Student();
alert(stu); // [object Object]

// 定义带参数的类User,并在构造函数中设置属性
function User(a, b, c) {
    this.sno = a;   // 学号
    this.sname = b; // 姓名
    this.sage = c;  // 年龄
}

// 创建User对象并访问属性
var u1 = new User(111, "zhangsan", 30);
alert("u1.sno = " + u1.sno); // 111
alert("u1.sname = " + u1.sname); // zhangsan
alert("u1.sage = " + u1.sage); // 30

var u2 = new User(222, "jackson", 55);
alert("u2.sno = " + u2.sno); // 222
alert("u2.sname = " + u2.sname); // jackson
alert("u2.sage = " + u2.sage); // 55

// 访问对象的属性,可以使用点操作符或方括号
alert("u2['sno'] = " + u2["sno"]); // 222
alert("u2['sname'] = " + u2["sname"]); // jackson
alert("u2['sage'] = " + u2["sage"]); // 55

// 定义类的另一种语法
Emp = function(ename, sal) {
    this.ename = ename; // 员工名
    this.sal = sal;     // 工资
};

var e1 = new Emp("SMITH", 800);
alert("e1.ename = " + e1.ename + ", e1.sal = " + e1.sal); // 输出:SMITH, 800

// 定义一个产品类,并且给类添加方法
Product = function(pno, pname, price) {
    this.pno = pno;       // 产品编号
    this.pname = pname;   // 产品名称
    this.price = price;   // 产品价格

    // 定义方法,获取价格
    this.getPrice = function() {
        return this.price;
    };
};

var xigua = new Product(111, "西瓜", 4.0);
var pri = xigua.getPrice();
alert("xigua.getPrice() = " + pri); // 4.0

// 通过prototype动态扩展方法
Product.prototype.getPname = function() {
    return this.pname;
};

// 调用扩展的getPname()方法
var pname = xigua.getPname();
alert("xigua.getPname() = " + pname); // 西瓜

// 给String类型动态扩展方法
String.prototype.suiyi = function() {
    alert("这是给String类型扩展的一个函数,叫做suiyi");
};

// 调用扩展的suiyi()方法
"abc".suiyi(); // 输出 "这是给String类型扩展的一个函数,叫做suiyi"

// 对象示例
var person = {
    name: "Alice",
    age: 25
};
alert("person.name = " + person.name + ",person.age = " + person.age); // 输出对象属性
    

6. Null

Null 表示空值,通常用于表示一个对象或变量尚未存在。

// Null 示例
var emptyValue = null;
alert("emptyValue:" + emptyValue); // 输出 Null 值
    

7. Undefined

Undefined 表示变量已声明但尚未赋值。

// Undefined 示例
var notDefined;
alert("notDefined:" + notDefined); // 输出 undefined 值
    

引用类型 (Reference Types)

引用类型包括 ObjectArrayFunction 等,这些类型的值存储在内存中的地址。

示例:定义对象


// 对象示例
var person = {
    name: "Alice",
    age: 25
};
alert("person.name:" + person.name + ",person.age:" + person.age); // 输出对象属性