数据类型
JavaScript的主要数据类型
JavaScript 的数据类型大致可以分为基本类型
和引用类型
两种。两者的区别是:将值存储在变量中的方法
基本类型 的变量中,值本身是直接被存储的。
引用类型 的变量,存储的是值得参照值(实际存储值的内存的地址)
字面量
在JavaScript中,字面量(Literal)是表示固定值的语法表示法。它们用于直接表示数据而不需要通过变量进行引用。
数字字面量(number)
数字字面量,可以进一步分为 整数字面量
和 浮点字面量
整数字面量
整数字面量是一种表示整数的语法表示法,在编程中用于直接表示整数值而不需要通过变量进行引用。整数字面量是一个数字序列,不包含小数点或指数部分。
在 JavaScript 中,整数字面量可以是十进制、十六进制、八进制或二进制形式。
- 十进制形式:以数字序列表示,例如:
42
、100
、-10
。 - 十六进制形式:以
0x
开头,后面跟随十六进制数字序列,例如:0xFF
、0x10
。 - 八进制形式:以
0
开头,后面跟随八进制数字序列,例如:0o10
、0o7
(在严格模式下,八进制字面量被禁用)。 - 二进制形式:以
0b
开头,后面跟随二进制数字序列,例如:0b1010
、0b1100
。
示例:
let decimal = 42; // 十进制整数字面量
let hexadecimal = 0xFF; // 十六进制整数字面量,相当于十进制的 255
let octal = 0o10; // 八进制整数字面量,相当于十进制的 8
let binary = 0b1010; // 二进制整数字面量,相当于十进制的 10
浮点字面量
浮点字面量是一种表示浮点数的语法表示法,在编程中用于直接表示浮点数值而不需要通过变量进行引用。浮点字面量是一个数字序列,包含一个小数点并可以包含指数部分。
在 JavaScript 中,浮点字面量可以是十进制形式或科学计数法形式。
- 十进制形式:以数字序列表示,包含一个小数点,例如:
3.14
、0.5
、-1.25
。 - 科学计数法形式:以数字序列加上一个
e
或E
表示指数,例如:2.5e2
(相当于2.5 * 10^2
,即250
)、5.2e-3
(相当于5.2 * 10^-3
,即0.0052
)。
示例:
let decimal = 3.14; // 十进制浮点字面量
let scientific = 2.5e2; // 科学计数法形式的浮点字面量,相当于 250
字符串字面量(string)
字符串字面量是一种表示字符串值的语法表示法,在编程中用于直接表示字符串而不需要通过变量进行引用。字符串字面量由一对单引号('
)或双引号("
)括起来的字符序列组成。
在 JavaScript 中,字符串字面量可以包含任意字符,包括字母、数字、标点符号和特殊字符。例如:
let singleQuoted = 'Hello'; // 单引号字符串字面量
let doubleQuoted = "World"; // 双引号字符串字面量
另外,在 JavaScript 中,还可以使用模板字面量(Template literals)表示多行字符串和插入变量的字符串。模板字面量由一对反引号(`)括起来的字符序列组成。例如:
let multiLine = `This is
a multi-line
string`; // 模板字面量表示多行字符串
let name = 'John';
let greeting = `Hello, ${name}!`; // 模板字面量表示插入变量的字符串
模板字符串
通过使用模板字符串(Template Strings),也就上面提到过的模板字面量,可以实现如下字符串的表示。
- 将变量嵌入字符串中
- 阔多行(=包含换行符)的字符串
在模板字符串中,使用 ` (反引号) 来代替单引号和双引号字符串。
示例:
let name = '九皇';
let msg = `你好,${name}叔叔。
好好学习哈~
`;
console.log(msg);
注意
- 原本在单引号(
'
)或双引号("
)中需要使用\n
进行换行,在模板字符串中可以直接换行。- 使用
${...}
的形式可以将变量嵌入字符串中。
数组字面量
数组主要是指数据的集合。
数组字面量由一对方括号([]
)括起来的项列表组成,每个项之间用逗号分隔。
在 JavaScript 中,数组字面量可以包含任意类型的数据项,包括数字、字符串、布尔值、对象、数组等。例如:
let numbers = [1, 2, 3, 4, 5]; // 数字数组字面量
let names = ['John', 'Alice', 'Bob']; // 字符串数组字面量
let mixed = [1, 'hello', true]; // 混合类型数组字面量
let objects = [{ name: 'John', age: 30 }, { name: 'Alice', age: 25 }]; // 对象数组字面量
另外,数组字面量还可以包含嵌套数组,从而创建多维数组。例如:
let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; // 二维数组字面量
对象字面量
对象是指将名字作为 key 可以访问的数组,也成为哈希,关联数组。
通常的数组只有索引能作为 key,与之不同,在对象中,可以将字符串作为 key 来访问。
对象字面量由一对花括号({}
)括起来的键值对列表组成,每个键值对之间用逗号分隔。
在 JavaScript 中,对象字面量可以包含多个键值对,每个键值对由一个键和一个值组成,键和值之间使用冒号(:
)分隔。键可以是字符串或标识符,值可以是任意类型的数据,包括数字、字符串、布尔值、对象、数组等。例如:
let person = {
name: 'John',
age: 30,
isStudent: false
}; // 对象字面量表示一个人的信息对象
let book = {
title: 'JavaScript Cookbook',
author: 'David Flanagan',
pages: 500
}; // 对象字面量表示一本书的信息对象
另外,对象字面量还可以包含嵌套对象,从而创建复杂的对象结构。例如:
let person = {
name: 'John',
age: 30,
address: {
city: 'New York',
country: 'USA'
}
}; // 对象字面量表示一个人的信息对象,包含嵌套的地址对象
对象 是指 … 各个元素可以使用 key 来访问的数组(也称为关联数组、哈希)
关联数组和对象是同一个东西
在 JavaScript 中,关联数组和对象是同一个东西。对于学过其他语言的人来说或许会感到有些违和感,但是在 JavaScript 中,关联数组
和对象
只是偶尔根据用法或者上下文来区分。
数组内的各个元素称为元素,而对象中的各个数据称为属性。属性中,不仅可以存储字符串和数字等信息,还可以存储函数(过程)。
存储函数的属性,称为方法。
var obj = {x:1, y:2, z:3};
console.log(obj.x); // 结果:1
console.log(obj['x']); // 结果:1
对象字面量的写法如下,需要注意的是括号字面量整体的不是中括号而是大括号。
{键名:值, 键名:值, ...}
要访问对象字面量的各个属性,有根据点运算符的方法和中括号这两种方法。
对象名.属性名 <--- 点运算符
对象名['属性名'] <--- 中括号
上述两种访问对象字面量方法的差异:
obj.123; (错误)
obj['123']; (正确)
在点运算符中,属性名被视为标识符,所以不能使用不遵循标识符命名规则的名称,如123。但是,在中括号方法中,属性名只是作为字符串来指定,所以没有这样的限制。
函数字面量(function)
函数字面量,也称为匿名函数或者函数表达式,是一种在JavaScript中定义函数的方式。与传统的函数声明(function declaration)不同,函数字面量可以在需要的地方直接定义函数,而不必提前声明函数名。
函数字面量的语法形式如下:
let functionName = function(parameters) {
// 函数体
};
其中:
functionName
是可选的函数名,可以省略,即匿名函数。parameters
是函数的参数列表,可以为空。- 函数体是一段代码块,包含了函数的具体实现。
示例:
let add = function(a, b) {
return a + b;
}; // 匿名函数
let result = add(3, 4); // 调用匿名函数
console.log(result); // 输出 7
未定义值(undefined)
在 JavaScript 中,未定义值(undefined)表示变量已声明但尚未赋值的状态。换句话说,当尝试访问尚未赋值的变量时,其值为 undefined。在 JavaScript 中,undefined 是一个全局变量,它的值是 undefined。
下面是一些产生未定义值的情况:
- 声明了变量但未初始化或赋值:
let x;
console.log(x); // 输出 undefined
- 访问对象的不存在的属性时:
let obj = {};
console.log(obj.foo); // 输出 undefined
- 函数未显式返回值时,默认返回 undefined:
function doSomething() {
// 没有返回值
}
console.log(doSomething()); // 输出 undefined
- 参数未传递时的默认值:
function greet(name) {
console.log('Hello ' + name);
}
greet(); // 输出 Hello undefined
在条件判断中,undefined 被视为假值(false)。因此,当一个变量的值是 undefined 时,它在布尔上下文中被视为 false。
空(null)
在 JavaScript 中,null 表示一个特殊的值,表示“空”、“无”、“不存在”或“未知”。null 是 JavaScript 中的原始值之一,表示变量不指向任何对象或值。当你想要明确表示某个变量为空时,可以将其赋值为 null。
以下是一些产生 null 值的情况:
- 手动赋值为 null:
let myVar = null;
console.log(myVar); // 输出 null
- 表示找不到值的情况:
let result = document.getElementById('nonexistent-id');
console.log(result); // 输出 null
- 表示空对象或不存在的属性:
let obj = { foo: null };
console.log(obj.bar); // 输出 null
null 是一个特殊的值,与 undefined 不同。undefined
表示一个变量已经声明但未被赋值,而 null
表示一个变量明确被赋值为空。
在条件判断中,null 被视为假值(false)。因此,当一个变量的值是 null 时,它在布尔上下文中被视为 false。