JavaScript 代码块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascript</title>
</head>
<body>
<h1>网页</h1>
<p id="demo">段落</p>
<div id="div">一个div</div>
<script>
document.getElementById("demo").innerHTML = "我的第一个 JavaScript 段落。";
document.getElementById("div").innerHTML = "这是div";
</script>
</body>
</html>以上例子就是一个很简单的JavaScript代码块,它可以在网页中显示一个段落和一个div元素。
JavaScript 语句标识符
| 语句 | 描述 |
|---|---|
| break | 用于跳出循环或switch语句。常用于循环体内部,立即终止当前循环。 |
| catch | 与try配合使用的错误处理语句块。当try块中发生异常时,执行catch块中的代码。 |
| continue | 跳过循环中的当前迭代,直接进入下一次循环。不会终止整个循环。 |
| do...while | 先执行一次代码块,然后在条件为true时重复执行。至少会执行一次。 |
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| ------ | ------ |
|---|---|
| catch | 与try配合使用的错误处理语句块。当try块中发生异常时,执行catch块中的代码。 |
| continue | 跳过循环中的当前迭代,直接进入下一次循环。不会终止整个循环。 |
| do...while | 先执行一次代码块,然后在条件为true时重复执行。至少会执行一次。 |
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| break | 用于跳出循环或switch语句。常用于循环体内部,立即终止当前循环。 |
|---|---|
| continue | 跳过循环中的当前迭代,直接进入下一次循环。不会终止整个循环。 |
| do...while | 先执行一次代码块,然后在条件为true时重复执行。至少会执行一次。 |
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| catch | 与try配合使用的错误处理语句块。当try块中发生异常时,执行catch块中的代码。 |
|---|---|
| do...while | 先执行一次代码块,然后在条件为true时重复执行。至少会执行一次。 |
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| continue | 跳过循环中的当前迭代,直接进入下一次循环。不会终止整个循环。 |
|---|---|
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| do...while | 先执行一次代码块,然后在条件为true时重复执行。至少会执行一次。 |
|---|---|
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| for | 创建一个计数循环,可指定初始值、条件和递增/递减步长。适用于明确循环次数的场景。 |
|---|---|
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| for...in | 遍历对象的可枚举属性或数组的索引。主要用于对象属性的遍历,不推荐用于数组。 |
|---|---|
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| function | 定义一个可重复使用的代码块。可以接收参数并返回值,是代码复用的基本单位。 |
|---|---|
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| if...else | 根据条件执行不同的代码块。可以有多个else if分支,实现多条件判断。 |
|---|---|
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| return | 结束函数执行并返回指定值。如果没有指定返回值,则返回undefined。 |
|---|---|
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| switch | 基于不同的条件值执行对应的代码块。适用于多分支条件判断,比多个if...else更清晰。 |
|---|---|
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| throw | 手动抛出异常,可以是任意类型的值。通常与try...catch配合使用。 |
|---|---|
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| try | 标记需要进行错误处理的代码块。如果发生错误,控制权会转移到catch块。 |
|---|---|
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
| var | 声明变量。函数作用域,可以重复声明,有变量提升特性。建议使用let/const替代。 |
|---|
| while | 当条件为true时重复执行代码块。如果初始条件为false,则一次都不会执行。 |
JavaScript 变量
变量是用于存储数据值的容器。在JavaScript中,变量可以使用var、let或const关键字进行声明。
变量的声明
var 关键字
var关键字用于声明变量。它有函数作用域,意味着在函数内部声明的变量只能在函数内部访问。
var x = 10;let 关键字
let关键字用于声明块级作用域的变量。它与var不同,let声明的变量只在其所在的代码块中有效。
let y = 20;const 关键字
const关键字用于声明常量,其值在声明后不能被改变。const声明的变量也有块级作用域。
const z = 30;变量的使用
变量在声明后可以被赋值和使用。
x = 100; // 合法
y = 200; // 合法
z = 300; // 错误,z是一个常量,不能被重新赋值变量的作用域
变量的作用域决定了变量在代码中的可访问性。
- 函数作用域:在函数内部声明的变量只能在函数内部访问。
- 块级作用域:在
{}内部声明的变量(如let和const)只能在该代码块内部访问。
变量的提升
var关键字声明的变量会发生变量提升,即变量可以在声明之前被访问,但是值为undefined。
console.log(a); // 输出 undefined
var a = 10;let和const关键字声明的变量不会发生变量提升,这意味着在声明之前访问这些变量会抛出错误。
console.log(b); // 错误,b未定义
let b = 20;JavaScript 数据类型
JavaScript 中的数据类型可以分为两大类:原始数据类型和引用数据类型。
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
原始数据类型
原始数据类型是指简单的数据类型,它们是不可变的,即一旦创建,就不能被修改。
数字类型(Number)
数字类型用于表示数值,包括整数和浮点数。
let a = 10; // 整数
let b = 3.14; // 浮点数字符串类型(String)
字符串类型用于表示文本,由零个或多个字符组成。
let c = "Hello, World!";布尔类型(Boolean)
布尔类型用于表示逻辑值,只有两个可能的取值:true和false。
let d = true;
let e = false;空类型(Null)
空类型表示一个空值,只有一个可能的取值:null。
let f = null;未定义类型(Undefined)
未定义类型表示一个未初始化的变量,只有一个可能的取值:undefined。
undefined表示“未定义”,下面是返回undefined的典型场景。
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefinednull和undefined的区别
null是一个表示“空”的对象,转为数值时为0;undefined是一个表示“此处无定义”的原始值,转为数值时为NaN。
引用数据类型
引用数据类型是指复杂的数据类型,它们是可变的,即可以被修改。
对象类型(Object)
对象类型用于表示复杂的数据结构,由属性和方法组成。
let person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};数组类型(Array)
数组类型用于表示有序的元素集合,每个元素都有一个唯一的索引。
let numbers = [1, 2, 3, 4, 5];函数类型(Function)
函数类型用于表示可重复使用的代码块。
function sayHello() {
console.log("Hello, World!");
}数值精度
JavaScript 中的数值精度是有限的,最多只能表示 53 位二进制位(16 位十六进制位)。这意味着 JavaScript 只能准确表示从 -2^53 到 2^53 之间的整数,超出这个范围的数值将失去精度。
let a = 9007199254740991; // 2^53 - 1
let b = a + 1;
console.log(b); // 9007199254740992在上面的示例中,变量 b 的值是 a 加 1 后的结果,但是由于 JavaScript 只能准确表示 53 位二进制位,所以 b 的值比预期的多了 1。
这是因为 JavaScript 中的数值是基于 IEEE 754 标准的双精度浮点数表示的,而双精度浮点数只能表示 53 位二进制位。
let a = 9007199254740992; // 2^53
let b = a + 1;
console.log(b); // 9007199254740992在上面的示例中,变量 b 的值是 a 加 1 后的结果,但是由于 JavaScript 只能准确表示 53 位二进制位,所以 b 的值与预期的相同。
数值范围
JavaScript 中的数值范围是从 -2^53 到 2^53,这意味着 JavaScript 可以准确表示的整数范围是从 -9007199254740991 到 9007199254740991。
如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,即 JavaScript 无法表示这么大的数,这时就会返回Infinity。
Math.pow(2, 1024) // Infinity如果一个数小于等于2的-1075次方(指数部分最小值-1023,再加上小数部分的52位),那么就会发生为“负向溢出”,即 JavaScript 无法表示这么小的数,这时会直接返回0。
Math.pow(2, -1075) // 0下面是一个实际的例子。
var x = 0.5;
for(var i = 0; i < 25; i++) {
x = x * x;
}
x // 0上面代码中,对0.5连续做25次平方,由于最后结果太接近0,超出了可表示的范围,JavaScript 就直接将其转为0。
JavaScript 提供Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值。
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324NaN
NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN 表示“非数值”(Not a Number),它是一个特殊的数值,用于表示不是有效数字的情况。
NaN === NaN // falseNaN 不等于任何值包括它自己
NaN与任何数(包括它自己)的运算,得到的都是NaN。
Infinity
Infinity 表示“无穷大”,它是一个特殊的数值,用于表示大于任何数的情况。
Infinity === Infinity // trueInfinity 与任何数(包括它自己)的运算,得到的都是 Infinity。
Infinity + 100 // Infinity
Infinity * 0 // NaNInfinity有正负之分,Infinity表示正的无穷,-Infinity表示负的无穷。
与数值相关的全局方法
parseInt
基本用法
parseInt方法用于将字符串转为整数。
parseInt("123") // 123
parseInt("123.45") // 123
parseInt("010") // 8(前导零被忽略)
parseInt("123a") // 123(非数字字符后的部分被忽略)字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1进制转换
parseInt方法还可以接受第二个参数(2到36之间的整数),表示被解析的字符串是多少进制的,返回一个十进制的整数。
parseInt('1000', 2) // 8(二进制转十进制)
parseInt('1000', 8) // 512(八进制转十进制)
parseInt('1000', 16) // 4096(十六进制转十进制)parseFloat()
parseFloat方法用于将字符串转为浮点数。
parseFloat("123.45") // 123.45
parseFloat("010") // 10(前导零被忽略)
parseFloat("123a") // 123(非数字字符后的部分被忽略)isNaN()
isNaN方法用于判断一个值是否为NaN。
isNaN(NaN) // true
isNaN(123) // falseisFinite()
isFinite方法用于判断一个值是否为有限的数值(即不是Infinity或NaN)。
isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true使用 let 和 const (ES6)
let 关键字
let关键字用于声明块级作用域的变量。与var不同,let声明的变量只在其所在的代码块中有效。
let x = 10;const 关键字
const关键字用于声明常量,其值在声明后不能被改变。const声明的变量也有块级作用域。
const y = 20;块级作用域
let和const声明的变量只在其所在的代码块中有效。这意味着在{}内部声明的变量只能在该代码块内部访问。
{
let z = 30;
const w = 40;
}
console.log(z); // 错误,z未定义
console.log(w); // 错误,w未定义在 2015 年以前,我们使用 var 关键字来声明 JavaScript 变量。
在 2015 后的 JavaScript 版本 (ES6) 允许我们使用 const 关键字来定义一个常量,使用 let 关键字定义的限定范围内作用域的变量。
let
let 是 ES6 引入的新变量声明方式,推荐使用。