您现在的位置是:网站首页 > 数据类型(Number, String, Boolean, Null, Undefined, Object)文章详情

数据类型(Number, String, Boolean, Null, Undefined, Object)

JavaScript中有六种基本数据类型和一种复杂数据类型。这些数据类型决定了变量可以存储什么类型的值以及如何操作这些值。

Number

Number类型用于表示整数和浮点数。JavaScript中的所有数字都是64位浮点数,遵循IEEE 754标准。

javascript 复制代码
let integer = 42; // 整数
let float = 3.14; // 浮点数
let scientific = 5e3; // 科学计数法,等于5000
let hex = 0xff; // 十六进制,等于255
let octal = 0o10; // 八进制,等于8
let binary = 0b1010; // 二进制,等于10

特殊数值:

javascript 复制代码
let infinity = Infinity; // 无穷大
let negativeInfinity = -Infinity; // 负无穷大
let notANumber = NaN; // 非数字

Number类型有一些有用的方法:

javascript 复制代码
let num = 123.456;
num.toFixed(2); // "123.46" - 保留两位小数
num.toPrecision(4); // "123.5" - 保留4位有效数字
num.toString(16); // "7b.74bc6a7ef9dc" - 转换为16进制字符串

String

String类型表示文本数据,可以使用单引号、双引号或反引号创建。

javascript 复制代码
let single = '单引号字符串';
let double = "双引号字符串";
let backtick = `反引号字符串`;

字符串插值:

javascript 复制代码
let name = "Alice";
let greeting = `Hello, ${name}!`; // "Hello, Alice!"

字符串方法:

javascript 复制代码
let str = "JavaScript";
str.length; // 10 - 字符串长度
str.charAt(4); // "S" - 获取第5个字符
str.includes("Script"); // true - 检查是否包含子串
str.indexOf("a"); // 1 - 查找字符位置
str.slice(0, 4); // "Java" - 截取子串
str.toUpperCase(); // "JAVASCRIPT" - 转为大写

Boolean

Boolean类型只有两个值:true和false,用于逻辑运算。

javascript 复制代码
let isTrue = true;
let isFalse = false;

逻辑运算:

javascript 复制代码
true && false; // false - 逻辑与
true || false; // true - 逻辑或
!true; // false - 逻辑非

自动类型转换:

javascript 复制代码
Boolean("hello"); // true
Boolean(""); // false
Boolean(0); // false
Boolean(1); // true
Boolean(null); // false
Boolean(undefined); // false
Boolean({}); // true

Null

Null类型只有一个值:null,表示"无"或"空"的引用。

javascript 复制代码
let empty = null;

null是一个表示"无"的特殊值,typeof null返回"object"是JavaScript的一个历史遗留bug:

javascript 复制代码
typeof null; // "object"

Undefined

Undefined类型表示未定义的值,是变量声明但未赋值时的默认值。

javascript 复制代码
let x;
console.log(x); // undefined

undefined与null的区别:

javascript 复制代码
undefined == null; // true
undefined === null; // false

Object

Object是JavaScript中唯一的复杂数据类型,用于存储键值对集合。

创建对象:

javascript 复制代码
let person = {
  name: "Alice",
  age: 25,
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

访问属性:

javascript 复制代码
person.name; // "Alice" - 点表示法
person["age"]; // 25 - 方括号表示法
person.greet(); // 调用方法

对象方法:

javascript 复制代码
Object.keys(person); // ["name", "age", "greet"] - 获取所有键
Object.values(person); // ["Alice", 25, function] - 获取所有值
Object.entries(person); // [["name", "Alice"], ["age", 25], ["greet", function]] - 获取键值对数组

数组也是特殊的对象:

javascript 复制代码
let colors = ["red", "green", "blue"];
typeof colors; // "object"
colors.length; // 3
colors[1]; // "green"

函数也是对象:

javascript 复制代码
function sayHello() {
  console.log("Hello");
}
typeof sayHello; // "function"
sayHello.name; // "sayHello"

类型检测

检测数据类型的方法:

javascript 复制代码
typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (历史遗留问题)
typeof {}; // "object"
typeof []; // "object"
typeof function(){}; // "function"

// 更精确的类型检测
Array.isArray([]); // true
Object.prototype.toString.call(null); // "[object Null]"

类型转换

JavaScript是弱类型语言,会自动进行类型转换。

字符串转换:

javascript 复制代码
String(123); // "123"
String(true); // "true"
String(null); // "null"
String(undefined); // "undefined"
String({}); // "[object Object]"

数字转换:

javascript 复制代码
Number("123"); // 123
Number("123abc"); // NaN
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(undefined); // NaN

布尔转换:

javascript 复制代码
Boolean(0); // false
Boolean(1); // true
Boolean(""); // false
Boolean("hello"); // true
Boolean(null); // false
Boolean(undefined); // false
Boolean({}); // true

原始值与引用值

原始值(Number, String, Boolean, Null, Undefined)是按值访问的:

javascript 复制代码
let a = 10;
let b = a;
a = 20;
console.log(b); // 10 - b不受a改变的影响

对象是引用类型,按引用访问:

javascript 复制代码
let obj1 = { value: 10 };
let obj2 = obj1;
obj1.value = 20;
console.log(obj2.value); // 20 - obj2和obj1引用同一个对象

深拷贝与浅拷贝

浅拷贝只复制一层属性:

javascript 复制代码
let original = { a: 1, b: { c: 2 } };
let shallowCopy = Object.assign({}, original);
original.b.c = 3;
console.log(shallowCopy.b.c); // 3 - 嵌套对象被共享

深拷贝复制所有层级:

javascript 复制代码
function deepCopy(obj) {
  return JSON.parse(JSON.stringify(obj));
}

let deepCopied = deepCopy(original);
original.b.c = 4;
console.log(deepCopied.b.c); // 3 - 完全独立的副本

包装对象

原始值可以临时转换为对象以调用方法:

javascript 复制代码
let str = "hello";
str.length; // 5 - JavaScript临时将str转换为String对象

// 等价于
let temp = new String(str);
let len = temp.length;
temp = null;

手动创建包装对象:

javascript 复制代码
let strObj = new String("hello");
typeof strObj; // "object"
strObj instanceof String; // true

我的名片

网名:~川~

岗位:console.log 调试员

坐标:重庆市-九龙坡区

邮箱:cc@qdc.top

沙漏人生

站点信息

  • 建站时间:2025/06/17
  • 本站运行
  • 文章数量
  • 总访问量
微信公众号
每次关注
都是向财富自由迈进的一步