JaveScript自用笔记

JavaScript基本语法

变量声明

常量

const a=1;

变量

var或let,区别如下:

  1. 作用域
  • 使用 var 声明的变量具有函数作用域或全局作用域。这意味着如果你在函数内部使用 var 声明一个变量,它只在该函数内部可见。
  • 使用 let 声明的变量具有块级作用域。这意味着如果你在代码块的开始(例如在大括号 {} 内)使用 let 声明一个变量,它只在该代码块内部可见。
  1. 重复声明
  • var 可以被重复声明在同一作用域内,这不会报错。
  • let 不能在同一作用域内重复声明同一个变量,这会导致语法错误。
  1. 暂时性死区(Temporal Dead Zone)
  • 使用 var 声明的变量可以在声明之前被访问,但访问结果未定义。
  • 使用 let 声明的变量在声明之前试图访问会导致引用错误(ReferenceError)。
  1. 变量提升(Hoisting)
  • var 声明的变量会发生变量提升,即声明会被提升到包含它的函数或全局作用域的顶部。但是赋值不会提升。
  • let 声明的变量不会发生变量提升,试图在声明之前访问会抛出错误。
  1. 重复使用或重新分配
  • 使用 var 声明的变量可以在声明之后重新分配新的值。
  • 使用 let 声明的变量也可以在声明之后重新分配新的值,但如果重新分配的值不是原始类型的值(例如对象或数组),则会导致错误。 对于给定的代码:
var str = "hello world"; // 使用 var 声明变量 
let str = "hello universe"; // 使用 let 声明变量(这会覆盖或“遮蔽”前面的 var 声明) 

在这段代码中,第一次使用 var 声明的 str 被赋予了 “hello world” 的值,但由于 let 的作用域规则,第二次使用 let 声明的 str 实际上创建了一个新的局部变量,并覆盖了之前的 str。因此,最后该代码块内的 str 的值将是 “hello universe”。

函数声明

第一种:

function add(a,b){
	return a+b;
}
console.log(add(1,2));

第二种:

let add = function(a,b){
	return a + b;
}
console.log(add(1,2));

第三种:

let add = function(a,b){
	return a + b;
}
console.log(add(1,2));

循环控制

for、while(同其他语言)、for of

let arr = [1,2,3,4,5];
for(let item of arr){
	console.log(item);
}

条件判断

if else(同其他语言)

JavaScript基本数据结构

字符串

字符串
str.length
计算长度
str[0]
输出特定位置元素
str.split
字符串拆分
获取子串
str.substring
str.slice
str.substr

数组

创建数组

使用数组字面量
let arr1 = [1, 2, 3, 4, 5];

这是创建数组的最简单方法。你只需要在方括号内列出所有的元素,每个元素之间用逗号分隔。

使用 Array 构造函数
let arr2 = new Array(1, 2, 3, 4, 5);

这也是一种创建数组的方法,其中 Array 是一个构造函数,可以接收一个或多个参数。当你传递一个或多个参数时,它们会成为数组的元素。

使用 Array 构造函数并指定长度
let arr3 = new Array(5);

在这种情况下,你使用 Array 构造函数并只传递一个数字参数。这将创建一个具有指定长度的数组,但所有元素都被初始化为 undefined。

使用 Array 构造函数、fill 方法和指定长度
let arr4 = new Array(5).fill(0);

在这里,你首先使用 Array 构造函数创建一个具有指定长度的数组,然后使用 fill 方法将所有元素填充为指定的值(在这种情况下为0)。

数组的常见操作

let arr=[1,2,3,4,5];

获取数组长度

使用 length 属性可以获取数组的长度,即数组中元素的数量。

console.log(arr.length); // 输出 5
获取数组元素

可以通过索引(从0开始)来访问数组中的元素。

console.log(arr[0]); // 输出 1
修改数组元素

通过指定索引,可以直接修改数组中的元素。

arr[0] = 100;

执行此语句后,arr 的第一个元素将变成 100。

复制数组的所有元素到一个新数组

slice() 方法返回一个新的数组对象,它是一个由开始到结束(不包括结束)选择的、由原数组的浅拷贝构成。如果不传递任何参数,它将复制整个数组。

let arr2 = arr.slice();

此外,还可以使用扩展运算符(… )来复制数组。

let arr3 = [...arr];

扩展运算符会创建一个新数组,其中包含原数组的所有元素。

在数组末尾添加一个元素

push() 方法将一个或多个元素添加到数组的末尾,并返回新的长度。

arr.push(6);

执行此语句后,arr 将变成 [100, 2, 3, 4, 5, 6]。

删除数组尾部的元素

pop() 方法删除并返回数组的最后一个元素。

arr.pop();

执行此语句后,arr 将变成 [100, 2, 3, 4, 5]。

在数组开头添加一个元素

unshift() 方法将一个或多个元素添加到数组的开头,并返回新的长度。尽管这个方法存在,但在处理大型数组时,由于它需要将所有现有元素向后移动,所以性能上不如 push()。

arr.unshift(0);

执行此语句后,arr 将变成 [0, 100, 2, 3, 4, 5]。

删除数组开头的元素

shift() 方法删除并返回数组的第一个元素。与 unshift() 类似,这个方法在处理大型数组时性能不佳,因为它需要将所有现有元素向前移动。

arr.shift();

执行此语句后,arr 将变成 [100, 2, 3, 4, 5]。

在实际应用中,通常建议尽量在数组的末尾进行添加和删除操作,因为这些操作的时间复杂度是 O(1),而在数组开头进行这些操作的时间复杂度是 O(n),其中 n 是数组的长度。这是因为当在开头添加或删除元素时,需要移动数组中的所有其他元素。

哈希表

用Map类型来创建哈希表。

创建Map对象
let map = new Map();

通过new Map()创建了一个新的Map对象。

添加键值对
map.set("a", 1);  
map.set("b", 2);  
map.set("c", 3);

使用set方法向Map中添加了三个键值对。键是字符串"a", “b”, 和"c",值分别是数字1, 2, 和3。

获取键值对
console.log(map.get("a")); // 输出 1

使用get方法通过键"a"从Map中检索值。输出为1。

删除键值对
map.delete("a");

使用delete方法通过键"a"从Map中删除了一个键值对。

判断是否存在某个键
console.log(map.has("a")); // 输出 false  
console.log(map.has("b")); // 输出 true

使用has方法检查Map中是否存在特定的键。第一个输出为false,因为键"a"已经被删除;第二个输出为true,因为键"b"仍然存在。

遍历键值对
for (let key of map.keys()) {  
    console.log(key, map.get(key));  
}  

// 输出 b 2 和 c 3
使用map.keys()获取Map中所有键的迭代器,然后遍历这些键。对于每个键,使用map.get(key)检索其对应的值,并打印键和值。由于键"a"已被删除,所以只输出了"b" 2和"c" 3。

Map对象提供了一种方便的方式来存储和操作有序的键值对集合,这在某些情况下比使用常规对象更加合适。

哈希集合

ES6 中引入的 Set 类型就是哈希集合,它用来存储不重复的元素,在Set中,每个值只会出现一次,即使你尝试多次添加相同的值,基本操作如下:

创建Set对象
let set = new Set();

通过new Set()创建了一个新的Set对象。

添加元素
set.add(1);  
set.add(2);  
set.add(3);

使用add方法向Set中添加了三个元素:数字1、2和3。由于Set只存储唯一的值,所以即使你尝试添加重复的值,它也只会出现一次。

删除元素
set.delete(1);

使用delete方法通过值1从Set中删除了一个元素。这意味着值1不再存在于Set中。

判断是否存在某个元素
console.log(set.has(1)); // 输出 false  
console.log(set.has(2)); // 输出 true

使用has方法检查Set中是否存在特定的元素。第一个输出为false,因为值1已经被删除;第二个输出为true,因为值2仍然存在。

遍历元素
for (let item of set) {  
    console.log(item);  
}  

使用for…of循环遍历Set中的元素。由于值1已被删除,所以循环只会输出值2和3。这展示了Set如何保持元素的插入顺序,并且只包含唯一的元素。

Set对象在需要快速查找成员、删除成员或者进行成员关系测试等场景中非常有用。它提供了比数组更快的查找速度,因为它使用了哈希表来实现。同时,Set自动去重的特性也使得它在处理需要唯一值的场景时非常方便。

参考资料

使用可视化面板的 JavaScript 基础

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值